关于websocket应用程序的几个问题

时间:2011-03-07 16:51:30

标签: jetty websocket

我目前正在使用Jetty作为我的websocket服务器,我正在尝试制作一个实时游戏。我真的这个新手。到目前为止,我已经成功地完成了最简单的工作(即聊天)。现在,我有几个问题:

  1. 我正在尝试列出服务器中连接的当前用户的列表;我该如何制作这样的功能?我真的不知道这是否实用,但我的想法是,有一个时间间隔让服务器知道“嘿,我还活着。”我希望我的用户列表是动态的,如果用户注销,列表将刷新。

  2. 我也在尝试为我的应用制作“房间”。基本上,“1号房间”的人看不到“2号房间”的人在做什么;其他房间的功能已经不言自明了。我仍然不知道这个;有人可以推荐一种方法来实现这个吗?

  3. 到目前为止,我一直很乐意学习这项技术,如果有帮助,我会很高兴。到目前为止,这两个是我的问题。我也对我的应用程序提出任何建议。

    提前谢谢大家。 : - )

    (嗯,#1和#2只能通过Javascript解决吗?)

1 个答案:

答案 0 :(得分:2)

你的问题不是真正的码头或特定于websocket。

Websockets只是为您的Web浏览器提供了一种与服务器通信的传输机制 - 在该传输上设置的内容,以及服务器管理信息的方式与websocket完全分开。

首先,如果您尚未阅读,请阅读以下文章:http://cometdaily.com/2010/03/02/is-websocket-chat-simple/

其次,考虑使用cometd使这更容易 - 版本2(目前处于测试阶段)支持websockets。

至于你的问题 - 你需要做两件事(cometd可以帮助解决这个问题)

<强> 1。定义协议
 定义一个位于websockets之上的消息传递协议。 Websockets只提供了一种发送数据块的方法,它们没有定义数据的含义。你需要构建一些可以做到这一点的东西,所以你有从客户端到服务器的消息,如。

  • CONNECT“user”
  • STILL_ALIVE
  • JOIN_ROOM“room1”
  • LEAVE_ROOM
  • GET_USER_LIST
  • SEND_MESSAGE“message”

然后你需要从服务器到客户端的消息

  • RECEIVE_MESSAGE“user”“message”
  • RECEIVE_USER_LIST“room1”

您需要提供一些可靠的方法来通过websocket发送数据。您可以创建自己的简单协议(如Jetty聊天示例),您可以使用JSON,XML或CometD通道。

<强> 2。服务器端状态
如果你有简单的聊天工作,那么你必须在此开始,但你需要的另一个方法是跟踪

  • 已连接的用户数
  • 他们的名字是什么
  • 他们连接到哪个插座
  • 他们在哪个房间

根据系统的复杂程度,您可以将其存储在服务器上的一个大单例中。