Polemo Chat客户端行为

简介:

chatofpomelo的git地址在这里:

https://github.com/NetEase/chatofpomelo

当你启动game-server和web-server之后,你就可以在web上进入一个聊天室进行实时聊天了。这里的实时聊天是使用了websocket技术,在网页和服务器上建立了一个连接,本文的目的在于分析清楚下客户端和服务端聊天的过程。

首先是客户端(页面)的js有:

jquery-1.8.0.min.js   // 这个不用讲了

pomeloclient.js     // 这个是pomelo提供的js客户端,主要客户端和pomelo服务端交互的消息组织

socket.io.js     //这个负责websocket的交互

client.js     //这个是chat页面特有的,页面上的事件就在这个里面负责

pop.js     // 这个是负责页面的消息弹出框的显示

客户端和pomelo交互的流程是:

连接connector流程:

1 客户端发送给服务端连接gate的消息

ws://127.0.0.1:3014

发送的消息内容如下:

"gate.gateHandler.queryEntry{"uid":"yejianfeng","timestamp":1360239219157}"

这个协议是pomelo自定义的协议,route + msg

2 服务端gate返回消息

"[{"id":3,"body":{"code":200,"host":"127.0.0.1","port":3050}}]"

这是个json数组,客户端会对每个json数组进行processMessage

这里单讲对于这个消息,有id,客户端判断是服务器的回复,需要回调之前已经注册好的回调函数。

于是进行了下面的操作:

3 客户端关闭当前与gate的连接:pomelo.disconnect()

4 客户端根据gate返回回来的connector的host和port创建新的连接

"ws://127.0.0.1:3050"

5 向connector发送消息

"connector.entryHandler.enter{"username":"yejianfeng","rid":"test","timestamp":1360240686755}"

这个消息内容是route + Json(用户名,roomid,时间戳)

6 connector向客户端返回消息

"[{"id":3,"body":{"users":["yejianfeng"]}}]"

这个消息内容是告诉用户这个room里面有哪些已经存在的用户

7 客户端收到这个消息知道注册成功了,需要进入到了聊天页面

所以将页面变化到了聊天的页面格式

发消息流程:

1 现在客户端已经维持了一个与connector的ws长连接了

2 客户端用户写好信息,调用回车键触发js事件

3 客户端在长连接上发送了消息:

"chat.chatHandler.send{"rid":"test","content":"hi","from":"yejianfeng","target":"*","timestamp":1360241187256}"

同样是route + json(roomid,content,from,target,timestamp)

4 服务端返回:

"[{"route":"onChat","msg":"hi","from":"yejianfeng","target":"*"},{"id":9,"body":{}}]"

这个返回就和之前的都不一样了,对于数组中的第一条

{"route":"onChat","msg":"hi","from":"yejianfeng","target":"*"}

这个会进行pomelo的回调:

pomelo.emit("onChat", {"route":"onChat","msg":"hi","from":"yejianfeng","target":"*"})

实际上就是调用事先注册的onChat事件

onChat事件做的事是将消息显示在历史对话框中等操作

收消息流程:

1 现在客户端已经维持了一个与connector的ws长连接了

2 服务端给客户端发送消息

"[{"route":"onChat","msg":"hi","from":"yejianfeng2","target":"*"}]"

3 客户端根据这个消息做了如下事情:

1> 显示消息

2> 显示弹出框pop

新用户登陆离开流程:

1 现在客户端已经维持了一个与connector的ws长连接了

2 服务端给客户端发送消息

离开:

"[{"route":"onLeave","user":"yejianfeng2"}]"

加入:

"[{"route":"onAdd","user":"yejianfeng2"}]"

PS:

其实这样看来这里还是有几个地方是否可以考虑变化下:

与gate的交互其实可以不用使用websocket长连接,直接可以使用http,这样能少了一次开销

目录
相关文章
|
2月前
|
人工智能 API 数据库
Qwen-Agent功能调用实践探索
本文详细解析了Qwen-Agent的核心功能——功能调用,涵盖其定义、工作流程、重要性和实际应用,通过实例展示了如何在Qwen-Agent中利用此功能与外部工具和API互动,扩展AI应用范围。
|
9月前
|
数据安全/隐私保护
Hbnu_DingLi Chat
Hbnu_DingLi Chat
68 0
Hbnu_DingLi Chat
|
4月前
|
搜索推荐
LangChain-10 Agents langchainhub 共享的提示词Prompt
LangChain-10 Agents langchainhub 共享的提示词Prompt
41 3
|
4月前
LangChain-15 Manage Prompt Size 管理上下文大小,用Agent的方式询问问题,并去百科检索内容,总结后返回
LangChain-15 Manage Prompt Size 管理上下文大小,用Agent的方式询问问题,并去百科检索内容,总结后返回
60 3
|
9月前
ChatGLM2 源码分析:`ChatGLMForConditionalGeneration.chat, .stream_chat`
ChatGLM2 源码分析:`ChatGLMForConditionalGeneration.chat, .stream_chat`
122 0
|
7月前
|
API Docker 微服务
开发个人Ollama-Chat--1 项目介绍
**开发个人Ollama-Chat** 是一系列教程,聚焦于使用`go-zero`框架构建聊天应用后端,并通过`Docker`部署至公网。涉及`Ollama`API调用、`Docker`本地环境、`cloudflare`免费部署、内网穿透及阿里云域名绑定。项目包括服务拆分、用户&模型管理、UI设计及多步骤部署。
|
9月前
|
人工智能 开发框架 搜索推荐
23.3k Star!推荐一款非常强大的GPT网页客户端:Lobe Chat
23.3k Star!推荐一款非常强大的GPT网页客户端:Lobe Chat
330 2
langchain中的chat models介绍和使用
之前我们介绍了LLM模式,这种模式是就是文本输入,然后文本输出。 chat models是基于LLM模式的更加高级的模式。他的输入和输出是格式化的chat messages。 一起来看看如何在langchain中使用caht models吧。
|
数据采集 自然语言处理 数据可视化
chat GPT 在数据处理中的应用
ChatGPT在数据处理中有多种应用,包括数据清洗、数据转换、数据合并和数据采样等。下面将详细介绍ChatGPT在数据处理中的应用。 1. 数据清洗: 数据清洗是数据处理中的重要步骤,用于处理缺失值、异常值和重复值等问题。ChatGPT可以帮助你理解和应用各种数据清洗技术。你可以向ChatGPT询问如何处理缺失值,它可以给出建议,例如删除包含缺失值的行或使用插补方法填充缺失值。你还可以询问如何检测和处理异常值,ChatGPT可以提供一些统计方法和可视化技巧,帮助你识别和处理异常值。此外,ChatGPT还可以为你提供处理重复值的方法,例如使用去重函数或删除重复行。 2. 数据转换: 在数据处
163 0

热门文章

最新文章