客户的即时沟通系统上线,是一个心理咨询平台,心理咨询师和咨询者一对一即时沟通~
1.需要linux服务器安装swoole
pecl install swoole
2.关闭防火墙或者添加端口9508
service iptables stop
3.如果用户是阿里云的服务器,注意一定要在安全组中添加9508端口(MDZZ这个弄了半天,一直以为是服务器安装swoole的问题)
4.PHP抒写后端代码(我们项目使用的TP3.2框架)
<?php
// +----------------------------------------------------------------------+
// | PHP version 5.5 |
// +----------------------------------------------------------------------+
// | Copyright (c) 2013-2015 |
// +----------------------------------------------------------------------+
// | Authors: Original Author |
// | 微信基本接口模块 继承 Base 控制器 |
// +----------------------------------------------------------------------+
//
namespace System\Controller;
use Think\Controller;
use Wechat\Serve\Http;
use Wechat\Serve\Token;
class SwooleController extends Controller {
//初始化程序
public function index(){
echo '正在启动程序' . PHP_EOL;
$this->server = new \swoole_websocket_server("0.0.0.0", 9501);
//第一次连接的时候
$this->server->on('open', function (\swoole_websocket_server $server, $request) {
echo "新用户连接 fd是 {$request->fd}".PHP_EOL;
});
$this->server->on('message', function (\swoole_websocket_server $server, $frame) {
//收到用户信息
//解析用户数据信息
$data = json_decode($frame->data,true);
//是否为第一次连接
if($data['type']=='init'){
//缓存用户信息
S(md5($data['uid']),$frame->fd);
S($frame->fd,md5($data['uid']));
echo '用户'.$data['uid'].'注册成功'.PHP_EOL;
}else{
if( !S(md5($data['tid'])) ){
$server->push($frame->fd, '{"type":"notice","message":"用户不在线"}');
}else{
//否则推送消息给其他用户
$this->server->push(S(md5($data['tid'])), $frame->data);
echo '发送给消息人'.$data['tid'].'的消息已经发送成功'.PHP_EOL;
echo '他的FD为'.S(md5($data['tid'])).PHP_EOL;
}
}
echo "接受到信息来自 {$frame->fd} ".PHP_EOL;
echo " 内容 {$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}".PHP_EOL;
});
//退出事件监控
$this->server->on('close', function ($ser, $fd) {
echo "用户 {$fd} 退出聊天系统" . PHP_EOL;
S(md5(S($frame->fd)),null);
S($frame->fd,null);
});
echo '程序启动完毕 启动时间:' . date('Y-m-d H:i:s') . PHP_EOL;
//启动程序
$this->server->start();
}
}
5.添加页面前端代码
<script>
//websocket长连接方式,swoole方式
var wsServer = 'ws://IP地址:9501';
ws = new WebSocket(wsServer);
var uid = {$uid};
var callid = {$callid};
ws.onopen = function(){
console.log("socket连接已打开");
data = {
uid:uid,
type:'init',
};
ws.send(JSON.stringify(data));
};
ws.onmessage = function(e){
console.log("message:" + e.data);
if(e.data)
{
info = $.parseJSON(e.data);
type = info.type;
msgid = info.msgid;
// 推送消息到对方客户端
$.post('/wechat/chat/success',{msgid:msgid},function(data){
if(data.error==200)
{
for_bottom();
$('.speak_box').append(data.data);
}
});
}
};
ws.onclose = function(){
console.log("socket连接已断开");
};
ws.onerror = function(e){
console.log("ERROR:" + e.data);
};
//离开页面时关闭连接
$(window).bind('beforeunload',function(){
ws.close();
}
);
</script>
6.linux服务器运行你的后端代码
php index.php system/swoole & (加入和号是运行后台运行)
7.前台刷新页面,看console 提示socket打开成功就可以了。进行及时沟通了~
以上就是“swoole框架实战案例解析,即时沟通技术”的详细内容,想要获取最新swoole教程或者资讯欢迎关注编程学习网
扫码二维码 获取免费视频学习资料

- 本文固定链接: http://phpxs.com/post/8121/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料
查 看2022高级编程视频教程免费获取