PHP+swoole实现简单多人在线聊天群发
//参考地址
http://www.jianshu.com/p/fedbb9d2d999
php代码:
<?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+
"
"
;
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>
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: php编写的抽奖程序中奖概率算法
- 下一篇:没有了