swoole和websocket简单聊天室开发
首先,我想说下写代码的一些习惯,第一,任何可配置的参数或变量都要写到一个config文件中。第二,代码中一定要有日志记录和完善的报错并记录报错。言归正传,swoole应该是每个phper必须要了解的,它号称重新定义了php。此聊天室利用了swoole高并发并且异步非阻塞的特点提高了程序的性能。 首先,定义一个 swoole_lock和swoole_websocket_server,并且配置参数,具体参数详情可以去查看。 lock = new swoole_lock(SWOOLE_MUTEX);// 对文件或数组进行锁操作,已达到同步 // swoole提供的Websocket Server // swoole日志路径,必须是绝对路径 $this->server->on('open',array($this,'onOpen')); // 启动服务 当有客户端链接时,简单记录客户端的信息。 $request->server['remote_addr'],'request_time' => date('Y-m-d H:i:s',$request->server['request_time']) ); write_log($message); }当有客户端发送信息时,对信息进行处理。 data);switch ($data->type) { // 记录每个链接的信息,同样不要尝试打印出来看,因为你只能看到自己的链接信息 public function onTask($server,$task_id,$from_id,$message) 最后,当客户端断开链接时,利用锁机制,同步删除客户端信息,并记录日志。 users[$fd]; // 释放客户端,利用锁进行同步 $this->lock->lock(); unset($this->users[$fd]); $this->lock->unlock();if( $username ) { write_log( $fd . ' disconnected'); 服务端完了,下面就是客户端,很简单,只需要用websocket链接就ok! ';
let webSocket = new WebSocket(address);
webSocket.onerror = function (event) {
alert('服务器连接错误,请稍后重试');
};
webSocket.onopen = function (event) {
if(!sessionStorage.getItem('username')) {
setName();
}else {
username = sessionStorage.getItem('username')
webSocket.send(JSON.stringify({
'message': username,'type': 'init'
}));
}
};
webSocket.onmessage = function (event) {
console.log(event);
let data = JSON.parse(event.data);
if (data.type == 1) {
$('#chat-list2').append(' }; 详细代码可以去我的 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。 (编辑:阜新站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |