swoole简易实时聊天

最近公司拓展业务,须要作一个即时聊天业务,就顺带研究了一下swoole,文档地址贴出来:https://wiki.swoole.com/javascript

文档写得很详细,demo也很简洁明了,因此废话就很少说了。php

工具:centOS、php、swoole、websockethtml

1.服务端代码,文件命名为start.phpjava

<?php
//建立websocket服务器对象,监听0.0.0.0:9502端口
$server = new swoole_websocket_server("0.0.0.0", 9502);
//监听WebSocket链接打开事件
$server->on('open', function (swoole_websocket_server $server, $request) {
    //实现多人通讯,须要将链接标识fd存储起来,最简便的办法就是写文件,不习惯的话能够选择更高大上的处理方式
   file_put_contents( __DIR__ .'/log.txt' , $request->fd);
});
//监听WebSocket消息事件
$server->on('message', function (swoole_websocket_server $server, $frame) {
    $fd_msg = file_get_contents( __DIR__ .'/log.txt');
    //fd是从1开始的哦,不然会报错
    for ($i=1 ; $i<= $fd_msg; $i++) {  
        $server->push($i, $frame->fd.' 说: '.$frame->data);//循环广播 
    }
});
//监听WebSocket链接关闭事件
$server->on('close', function ($ser, $fd) {
    echo "client {$fd} closed\n";
});
//开启服务
$server->start();

2.在服务端运行该文件,使用 php start.php命令web

3.编辑一个客户端页面,命名为send.php服务器

<!DOCTYPE html>
<html>
<head>
  <title></title>
  <meta charset="UTF-8">
  <script type="text/javascript">
    var ws = new WebSocket("ws://192.168.1.124:9502");//这里是服务器的地址,若是用于本地测试,本地host请务必也使用该地址,能够不加端口号
    ws.onopen = function (event) {
      ws.send('ws connect success!');
    };
    function message(callback)
    {
       ws.onmessage = function (event) {
        var data = event.data;
        callback(data);
      }
    }
   
    function info(str)
    {
        var div = document.createElement('div');
        div.innerHTML=str;
        var container = document.getElementById('container');
        container.appendChild(div);
    }
    message(info);
  </script>
</head>
<body>
<div id="container"></div>
<input  type="text" id="content">
<button  onclick="ws.send( document.getElementById('content').value )">发送</button>
</body>
</html>

4.配置好虚拟机,执行一下看一看websocket

页面写得很糙,懒得写了,若是有兴趣能够华丽丽地写一个高的大的页面哦。swoole

相关文章
相关标签/搜索