PHP+swoole实现简单多人在线聊天群发
发布:smiling 来源: PHP粉丝网 添加日期:2021-07-06 10:26:33 浏览: 评论:0
这篇文章主要介绍了PHP+swoole实现简单多人在线聊天群发 的相关资料,需要的朋友可以参考下,由于本文的能力有限,有好多聊天逻辑的细节没有实现,只实现了群发,具体代码如下所示:
php代码:
- $serv = new swoole_websocket_server("127.0.0.1",3999);
- //服务的基本设置
- $serv->set(array(
- 'worker_num' => 2,
- 'reactor_num'=>8,
- 'task_worker_num'=>1,
- 'dispatch_mode' => 2,
- 'debug_mode'=> 1,
- 'daemonize' => true,
- 'log_file' => __DIR__.'/log/webs_swoole.log',
- 'heartbeat_check_interval' => 60,
- 'heartbeat_idle_time' => 600,
- ));
- $serv->on('connect', function ($serv,$fd){
- // echo "client:$fd Connect.".PHP_EOL;
- });
- //测试receive
- $serv->on("receive",function(swoole_server $serv,$fd,$from_id,$data){
- // echo "receive#{$from_id}: receive $data ".PHP_EOL;
- });
- $serv->on('open', function($server, $req) {
- // echo "server#{$server->worker_pid}: handshake success with fd#{$req->fd}".PHP_EOL;;
- // echo PHP_EOL;
- });
- $serv->on('message',function($server,$frame) {
- // echo "message: ".$frame->data.PHP_EOL;
- $msg=json_decode($frame->data,true);
- switch ($msg['type']){
- case 'login':
- $server->push($frame->fd,"欢迎欢迎~");
- break;
- default:
- break;
- }
- $msg['fd']=$frame->fd;
- $server->task($msg);
- });
- $serv->on("workerstart",function($server,$workerid){
- // echo "workerstart: ".$workerid.PHP_EOL;
- // echo PHP_EOL;
- });
- $serv->on("task","on_task");
- $serv->on("finish",function($serv,$task_id,$data){
- return ;
- });
- $serv->on('close', function($server,$fd,$from_id) {
- // echo "connection close: ".$fd.PHP_EOL;
- // echo PHP_EOL;
- });
- $serv->start();
- function on_task($serv,$task_id,$from_id,$data) {
- switch ($data['type']){
- case 'login':
- $send_msg="说:我来了~";
- break;
- default:
- $send_msg="说:{$data['msg']['speak']}";
- break;
- }
- foreach ($serv->connections as $conn){
- if ($conn!=$data['fd']){
- if (strpos($data['msg']['name'],"游客")===0){
- $name=$data['msg']['name']."_".$data['fd'];
- }else{
- $name=$data['msg']['name'];
- }
- }else{
- $name="我";
- }
- $serv->push($conn,$name.$send_msg);
- }
- return;
- }
- function on_finish($serv,$task_id,$data){
- return true;
- }
前端代码:
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>WebSocket测试</title>
- <script language="javascript"type="text/javascript" src="jquery-1.12.0.min.js">
- </script>
- </head>
- <body>
- <h2>WebSocket Test</h2>
- 昵称:<input type="text" id="name" size="5" value="游客"/> <input type="text" id="content">
- <button onclick="speak_to_all()">发送</button>
- <br/><br/>
- <textarea id="message" style="overflow-x:hidden" rows="10" cols="50"></textarea>
- <div id="output"></div>
- </body>
- <script language="javascript"type="text/javascript">
- var wsUri ="ws://127.0.0.1:3999/";
- var output;
- function init() {
- output = document.getElementById("output");
- testWebSocket();
- }
- function testWebSocket() {
- websocket = new WebSocket(wsUri);
- websocket.onopen = function(evt) {
- onOpen(evt)
- };
- websocket.onclose = function(evt) {
- onClose(evt)
- };
- websocket.onmessage = function(evt) {
- onMessage(evt)
- };
- websocket.onerror = function(evt) {
- onError(evt)
- };
- }
- function get_speak_msg(){
- var name=document.getElementById("name").value;
- var speak=document.getElementById("content").value;
- var json_msg='{"name":"'+name+'","speak":\"'+speak+'"}';
- return json_msg;
- }
- function pack_msg(type,msg){
- return '{"type":"'+type+'","msg":'+msg+'}';
- }
- function onOpen(evt) {
- append_speak("已经联通服务器.........");
- speak_msg=get_speak_msg();
- send_msg=pack_msg("login",speak_msg);
- doSend(send_msg);
- }
- function onClose(evt) {
- append_speak("俺老孙去也!");
- }
- function onMessage(evt) {
- append_speak(evt.data);
- }
- function onError(evt) {
- alert(evt.data);
- }
- function doSend(message) {
- websocket.send(message);
- }
- function append_speak(new_msg){
- document.getElementById("message").value=document.getElementById("message").value+new_msg+"\n";
- document.getElementById('message').scrollTop = document.getElementById('message').scrollHeight;
- }
- function speak_to_all(){
- send_msg=pack_msg("speak",get_speak_msg());
- if(document.getElementById("content").value==""){
- return;
- }
- doSend(send_msg);
- document.getElementById("content").value="";
- }
- init();
- </script>
- </html>
Tags: PHP+swoole PHP多人在线聊天
相关文章
- ·使用php+swoole对client数据实时更新(一)(2021-07-04)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)