• 展开微博窗口
  • QQ:52619941
  • 微信:cnmemory
  • 展开分类目录
  • 还没有账号?

Memory

聊一聊字节顺序

每次提到字节顺序就只记得大端法(Big Endian)小端法(Little Endian)。因为平时开发中并不会经常用到,但偶尔又不得不提起它,所以为了加深对它的印象,今天就肤浅的聊一下自己的理解。

字节序在我的理解中就是数据在内存存储中或网络传输中的字节的排列顺序。

一般来说,一个内存地址对应一个字节,那么一组数据在内存中的存储必然会有一个顺序,而这个顺序就需要一定的规范,使得数据在读取、写入的时候才能得到一致的结果,那这个规范指的就是字节顺序,那么字节顺序又存在两种规范,即大端小端

举个例子,假设一个int型数据0x12345678在一台32位的机器上,内存地址由0x00000000开始递增。

那么大端法的存储则是如下表…

NAT网络下tcp_timestamp与tcp_tw_recycle引发丢包问题

场景

服务器A与服务器B在同一个NAT网络环境下,出口IP相同
服务器A -访问服务器C接口
服务器B -访问服务器C接口
此时AB其中一台服务器无法得到响应。

解决方式

通过查阅资料,是因为被调用服务端配置了tcp_tw_recycle,而调用方配置了tcp_timestamp造成了丢包的问题。

需要客户端关闭tcp_timestamp或者服务端关闭tcp_tw_recycle

## /etc/sysctrl.conf
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_timestamps = 0

mac下编译php扩展找不到php.h的问题

编译php扩展时执行make命令时出现下面错误

fatal error: 'php.h' file not found

建立软连接

sudo ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include /usr/include

或者修改Makefile里的phpincludedir = /usr/include/php到你的php source目录下

编译完后结果发现版本对不上,索性将源码包里的…

CLI下php进程假死问题排查

首先通过strace命令跟踪假死进程的系统调用信息

strace -p 16618

执行以上命令后,得到如下结果

poll([{fd=33, events=POLLOUT|POLLWRNORM}], 1, 0) = 0 (Timeout)
poll([{fd=33, events=POLLOUT}], 1, 1000) = 0 

利用swoole的task进程和redis实现队列任务

swoole简介

面向生产环境的 PHP 异步网络通信引擎,可以通过该扩展快速创建TCP/UDP服务端、Http服务端、websocket服务端。

Task进程简介

如果没有接触过swoole可以先上swoole官网了解swoole的进程模型

swoole_server中提供了task的进程,用来异步处理耗时的任务,只需要配置swoole_server时设置task_worker_num即可启用task进程,在worker进程中使用$server->task(array $data)进行任务的投递,但是在任务耗时且量大的情况下会出现任务丢失的现象,所以决定采用第三方来实现队列,来确保数据的完整和可靠性。…

实战直播平台开发之初窥门径(一)

前几天,接到一个需求,需要构建一个简单的直播平台,这也是第一次接触到直播方面的开发任务,带着学习与挑战的精神决定记录下来这次开发的全过程。

经过几番查阅资料,对于如何构建一个直播平台有了一些初步的概念。

1、协议

首先来说说直播的协议,在查阅资料的过程中发现以下三种普遍应用的协议。

  1. RTMP(Real Time Messaging Protocol)
  2. RTSP(Real Time Streaming Protocol)
  3. HLS(HTTP Live Streaming)

关于这三种协议,前二者是基于TCP/UDP进行实时的数据传输,HLS则是采用了…

计算机中的字、字节、字长

在计算机中每8位二进制数字构成一个字节,若干个字节组成一个字,而这个字的二进制位数就是字长。

星期五

php基于libevent实现并发socket服务端

通常提到PHP,很多人都认为它只能做Web项目,当然,在Web开发时也的确能够体现出PHP迅敏开发的优势。

那么我们能否单纯的用PHP开发网络服务端?我们从最简单的做法开始尝试。

如下面一段代码,想要用PHP来实现一个socket服务端相对来说还是比较简单的。

$ip = '127.0.0.1';