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,这样能少了一次开销

本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/archive/2013/02/19/2916810.html,如需转载请自行联系原作者

Polemo Chat客户端行为相关推荐

  1. 案例学习BlazeDS+Spring之十:Chat(

    Chat: 该DEMO展示的是BlazeDS的消息服务,是一个使用发布/订阅者模式的简单聊天室. 一.运行DEMO: 1.运行程序:http://localhost:8400/spring-flex- ...

  2. TCP网络编程之chat聊天室

    这一节我们再讲一个tcp长连接的例子,实现网络聊天室的基本功能. 聊天室的基本原理:采用Client/Server TCP架构,客户端发送消息给服务器,服务器再把消息转发给所有的客户端. 一.需求分析 ...

  3. steam linux 64位,Valve可能会很快为Linux发布原生64位Steam客户端

    原标题:Valve可能会很快为Linux发布原生64位Steam客户端 Valve在今天发布了一款针对Windows.Mac和Linux平台的全新稳定版本的Steam客户端,仅做了两项改动,其中一项改 ...

  4. WebSocket 协议

    1.1 背景知识 由于历史原因,在创建一个具有双向通信机制的 web 应用程序时,需要利用到 HTTP 轮询的方式.围绕轮询产生了 "短轮询" 和 "长轮询". ...

  5. FLEX+Delphi,FLEX+Java,FLEX+C# 的聊天室

    chat  客户端代码 FLEX3 开发 ChatServer Delphi6 开发的服务端 Server     java 开发的服务端 WindowsApplication1 C# 开发的服务端 ...

  6. 使用SuperWebSocket 构建实时 Web 应用

    原文地址为: 使用SuperWebSocket 构建实时 Web 应用 Web 应用的信息交互过程通常是客户端通过浏览器发出一个请求,服务器端接收和审核完请求后进行处理并返回结果给客户端,然后客户端浏 ...

  7. websocket协议详解

    1 背景 WebSocket protocol 是HTML5一种新的协议.它是实现了浏览器与服务器全双工通信(full-duplex). 这篇文章介绍了关于Websocket 协议的相关信息,供大家参 ...

  8. PHP-Swoole+tp3+websocket+redis,利用接口制作客服实时对话聊天服务器

    菜鸟一个,接受评价 直奔主题 1.在php中引入swoole扩展 2.利用swoole搭建websocket聊天服务器 tp3根目录创建server目录,用来存放搭建服务器的php文件,命名serve ...

  9. vue+express+websocket+mongodb在线群聊工具

    vue+express+websocket+mongodb在线群聊工具 目录 vue+express+websocket+mongodb在线群聊工具 1.项目概述 2.项目运行 3.项目代码细节 3. ...

最新文章

  1. web开发过程中经常用到的一些公共方法及操作
  2. 约瑟夫问题-学习笔记
  3. ASP.NET网站实现多语言版本 【转】
  4. Ubuntu 18.04 LTS环境下 MNN 的编译与使用
  5. MyEclipse教程:Web开发——调试JSP
  6. 基于vue-cli的webpack配置优化
  7. I00006 打印等腰三角形字符图案(底边在下)
  8. 题解 AT25 【プログラミングコンテスト】
  9. Friendly Tiny6410的Superboot安装及DNW驱动的安装
  10. 马尔科夫模型系列文章(一)——马尔科夫模型
  11. 软件有计算机id如何生成注册号码,苹果账号注册方法:如何申请苹果id账号
  12. 学习笔记(二十一)—— 使用SMTP发送电子邮件
  13. 深度复数网络 Deep Complex Networks
  14. struct和class异同
  15. 前端vue中ts无法识别引入的vue文件,提示找不到xxx.vue模块的解决【引入新建页面或者通过router引入时报错】
  16. 时钟树综合CTS技术经验分享(高薪必备)
  17. abc云支付php,凉秋易支付,免签约支付平台,彩虹易支付,abc云支付云钱包,云支付,云结算,支付接口,支付营销,易支付,微信支付,支付宝,QQ钱包,个人支付接口,免签支付接口...
  18. 每日一结(11.1)
  19. 基于matlab的电机,基于MATLAB的电机仿真研究
  20. 会声会影2022版本软件下载安装使用激活教程

热门文章

  1. 144hz minidp转dp_毕亚兹miniDP转HDMI转接器,拓展你的Surface Pro 3上4K大屏
  2. python linux 优化_Linux性能优化(一)
  3. jquery判断元素是否包含某class
  4. Unity 网络编程(Socket)应用
  5. 下拉框--请选择-- 浏览器渲染不同造成页面初始化不一致
  6. Activity之间跳转的效果_overridePendingTransition
  7. aptana studio 3支持jquery
  8. Base64 的那些事儿
  9. java集合浅谈(一)
  10. ADO.NET中的五个主要对象