//参考地址
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
){
});
$serv
->on(
"receive"
,
function
(swoole_server
$serv
,
$fd
,
$from_id
,
$data
){
});
$serv
->on(
'open'
,
function
(
$server
,
$req
) {
});
$serv
->on(
'message'
,
function
(
$server
,
$frame
) {
$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
){
});
$serv
->on(
"task"
,
"on_task"
);
$serv
->on(
"finish"
,
function
(
$serv
,
$task_id
,
$data
){
return
;
});
$serv
->on(
'close'
,
function
(
$server
,
$fd
,
$from_id
) {
});
$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;
}
前端代码:
<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>