中国建设银行总行门户网站,电商网站开发平台哪个好,成都哪家公司做网站,什么是网站设计种类在游戏中各玩家之间都可以进行聊天之类的交互#xff0c;在这一篇中#xff0c;我们就来实现一个简易的聊天室功能#xff0c;这在上一篇代码的基础上很容易就能实现。1、功能需求 客户端发送一条消息#xff0c;经由服务端转发#xff0c;所有在线客户端都能收到#xf… 在游戏中各玩家之间都可以进行聊天之类的交互在这一篇中我们就来实现一个简易的聊天室功能这在上一篇代码的基础上很容易就能实现。1、功能需求 客户端发送一条消息经由服务端转发所有在线客户端都能收到如下图所示2、代码实现 在skynet/examples目录下创建main_chat.lua文件然后把main_echo.lua的代码复制过来稍作修改代码修改后如下图所示 local skynet require skynet
local socket require skynet.socketlocal clients {}
function connect(fd, addr)--启用连接print(fd.. connected addr:..addr)socket.start(fd)clients[fd]{}--消息处理while true dolocal readdatasocket.read(fd)--正常接收if readdata~nil thenprint(fd.. recv ..readdata)for i, _ in pairs(clients) do --广播socket.write(i, readdata)end--断开连接elseprint(fd.. close )socket.close(fd)clients[fd]nilendend
endskynet.start(function()local listenfd socket.listen(0.0.0.0, 8888)socket.start(listenfd ,connect)
end) 首先定义一个表clients用于存放客户端连接它将以连接标识fd为索引来保存连接信息 客户端建立连接时connect被调用它会通过“clients[fd]{}”把新的fd存放到clients表中 若在此过程中接收到数据则遍历clients表逐个转发 断开连接时通过clients[fd]nil删除客户端信息。 3、配置文件 在skynet/examples目录下创建config_chat文件配置参数如下所示 include config.paththread 8
logger nil
logpath .
harbor 0
start main_chat -- main script
bootstrap snlua bootstrap -- The service for bootstrap
-- snax_interface_g snax_g
cpath root..cservice/?.so
-- daemon ./skynet.pid 4、运行代码 首先在终端输入指令这里不再重复上一篇文章有启动主服务然后开启两个telnet客户端对主服务进行连接连接成功之后客户端1号发送“hello”的消息给主服务主服务收到消息之后再转发给客户端1号和客户端2号。