websocket 连接分客户端和服务端,客户端就是客户访问打开的页面,服务端就是服务器文件
首先第步要在项目中安装swoole 拓展,此处不再细说
客户端文件可以话在任何地方 ,电脑桌页面也行,只要能在浏览器打开。文件示例如下:
<html>
<head>
<meta charset="UTF-8">
<title>Web sockets test</title>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
var wsServer = 'ws://111.231.231.157:4888'; //服务器地址
var websocket = new WebSocket(wsServer); //创建WebSocket对象
websocket.onopen = function (evt) {
//已经建立连接
$('#send').on('click',function(){
var msg = $('#msg').val();
if(msg == '')
{
alert('msg can not be null');
return ;
}
var arr =Array();
arr[0]=6; //本人id //每次刷新页面,服务器会生成一个新的id
arr[1]='小东';
arr[2]=msg;
arr[3]=7; //发给对方的id
var str = JSON.stringify(arr);
websocket.send(str);
});
};
websocket.onclose = function (evt) {
//已经关闭连接
};
websocket.onmessage = function (evt) {
//收到服务器消息,使用evt.data提取\
console.log(evt.data)
};
websocket.onerror = function (evt) {
//产生异常
};
function send(){
$msg = $('#msg').val();
websocket.send($msg);
}
</script>
</head>
<body>
<input id="msg" type="text" name="msg">
<input id="send" type="button" name="" value="发送">
</body>
</html>
服务端,文件可以放在服务器的任何地方,但是上传到服务器后要让php文件运行起来,
在git 中找到文件目录,然后: php websocket.php 即可
文件内容:
<?php
$server = new swoole_websocket_server("0.0.0.0", 4888);
$server->on('open', function ($server, $request) {
// echo '新用户加入';
$GLOBALS['fd'][$request->fd]['id']=$request->fd;
echo 'id='.$request->fd;
//echo "server: handshake success with fd{$request->fd}\n";
});
$server->on('message', function ($server, $request) {
//$request->fd //谁发来的
//$request->data //发来的内容
$resut = json_decode($request->data);
$f_d = $resut[1];
$t_d = $resut[3];
$server->push($t_d,$f_d.'对你说:'.$resut[2]); //主动发送给$t_d
});
$server->on('close', function ($server, $fd) {
echo "client {$fd} closed\n";
unset($GLOBALS['fd'][$fd]);
});
$server->start();
实现方法,在浏览器上打开两个客户端文件窗口,然后发送给对应 的id,另一个窗口就能收到信息