workerman 是一个php编写的通讯服务。之前的项目都是用它做数据接口服务
这次用它做一个简单的在线聊天室~
1.下载最新版本的workerman
可以去http://www.workerman.net 去下载
我这里将service 和 client 分开了两个文件夹,方便管理
大致的项目结构如下。
客户端:
客户端就简单了。一个简单的html代码。嵌入了一个 websocket 监听服务var ws, name, client_list={};
function connect() {
// 创建websocket
ws = new WebSocket("ws://192.168.0.88:2345");
// 当socket连接打开时,输入用户名
ws.onopen = onopen;
// 当有消息时根据消息类型显示不同信息
ws.onmessage = onmessage;
ws.onclose = function() {
console.log("连接关闭,定时重连");
connect();
};
ws.onerror = function() {
console.log("出现错误");
};
}
实现websocket的 打开,message的监听,以及close
1、当打开一个客户端,则立马弹出一个输入姓名的对话框function onopen(){
//console.log(name);
//var username=connect_id="";
if(!name)
{
name=prompt("请输入您的名字","");
if(!name || name=='null'){
name = '咕哒子';
}
}
$('#curuser').text(name);
data='{"type":"1","user":"'+name+'"}';
ws.send(data);
}
并将数据推送给服务端。type =1 代表登陆。
2、当收到消息时,判断消息类型,是群发消息 还是私聊消息。进而处理。
另外,每次用户有新用户登陆上来,都会 给各个客户端推送,用户列表。进行渲染function onmessage(e){
//console.log(e.data);
var data = eval("("+e.data+")");
var info=$('#chatinfo').html();
if(data.type==1)
$('#chatinfo').html(info+'
'+data.data);
else if(data.type==2)
{
// 在线用户列表 userinfo
$('#userinfo').html(data.data);
}
else i