socket 消息队列服务器与php客户端通信
socket 消息队列服务器与php客户端通信
class Socket {
//消息头
private $head = array();
//消息体
private $body = array();
private static $obj = null;
public function __construct() {
}
/**
* 单例入口
* @return Socket
*/
public static function getInstance(){
if(is_null(self::$obj)){
self::$obj = new Socket();
}
return self::$obj;
}
/**
* 设置消息头信息
* @param unknown_type $msgid
* @param unknown_type $uid
* @param unknown_type $rid
* @param unknown_type $type
*/
public function setHead($msgid, $uid, $rid, $transmode) {
$head = array(
"msgid"=>$msgid,
"uid"=>$uid,
"rid"=>$rid,
"transmode"=>$transmode
);
$this->head[] = $head;
}
/**
* 设置消息包体
* @param unknown_type $body
*/
public function setBody($body) {
$this->body[] = $body;
}
/**
* 构造消息
*/
public function getMsg() {
$msg = "";
if (!empty($this->head)) {
foreach ($this->head as $key => $val) {
if ($this->body[$key] != "") {
$arr = array(
"msghead" => $val,
"msgbody" => $this->body[$key]
);
$msg .= json_encode($arr). "rn";
}
}
}
return $msg;
}
/**
* 发送消息
* @param unknown_type $ip
* @param unknown_type $port
*/
public function send(){
$gateway = ConfigHelper::getInstance()->setConfig("config")->getItem("gateway");
$ip = $gateway[0]['ip'];
$port = $gateway[0]['port'];
$msg = $this->getMsg();
log($msg, "socket");
if (($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
log("socket create error");
exit();
}
if (socket_connect($socket, $ip, $port) === false) {
log("socket connect error.");
exit();
}
if (socket_write($socket,$msg, strlen($msg)) == false) {
log("socket write error.");
exit();
}
socket_close($socket);
}
}
想用C语言开发服务端 可是我不会求帮写个
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
workerman
服务端用php也能开发啊,可以试试workerman,性能不比c的差多少,主要是简单,开发快
代码不是我写的 我不会 socket 我看了他的代码 socket服务端 只负责监听 接收和转发
你是怎么搞的啊?
swoole要装扩展包,而且看的比较辛苦,感情workerman速成比较快
引用来自“geminiblue”的评论
..不支持长连啊?那还不如curl+nginx来的方便
建议楼主看看这个swoole,服务端也是php写,没有你想的那么复杂。。。
..不支持长连啊?那还不如curl+nginx来的方便
建议楼主看看这个swoole,服务端也是php写,没有你想的那么复杂。。。