Websockets如何区分正在发送的数据

时间:2012-10-18 01:57:08

标签: websocket phpwebsocket

我正在阅读如何实现websockets。现在我正在查看fancywebsockets实现,因为它更容易设置。我的问题更多地是为了理解一般的websockets,所以我想对此进行一些分类。

  1. 您能控制WS发送的数据(接收数据的I.E客户端)吗?

  2. 您如何处理,比方说私人消息场景,您还将消息存储在数据库中。如果您在数据库中存储文本并在屏幕上显示消息,那么WS如何将该更改放在浏览该页面的其他人身上。 (WS是否会收听该PAGE中发生的所有更改?)。一个明显的例子是在Facebook上,浏览同一墙的两个人看到了墙主的更新?

  3. 虽然有点无关,但好奇的问题。如果websockets为我们提供数据的实时更新,为什么没有人创建Google Wave服务的fork版本。是因为不是每个浏览器都有明确的实现吗?

  4. 感谢。

1 个答案:

答案 0 :(得分:0)

关于1.真的我不明白这个问题,Websockets连接与TCP连接相同,你可以在发回之前修改收到的日期。 Bristleback Server中的简单示例(服务器获取已编辑用户状态的预览,然后检查它是否包含非法单词,然后将状态的完整预览发送回用户:

@ActionClass
public class ClientNotificationUpdateAction {

  @Action
  public UserStatus previewEditedStatus(FacebookUser user, UserStatus status) {
    removeBadWords(status);
    return status;
  }
}

关于2. WebSockets服务器具有关于所有连接用户的信息,因此可以将消息简单地发送给所有连接的用户,或者另外过滤以发送此通知,例如仅向关闭的朋友发送。这里还有一些代码(客户更新他的状态,这个状态会发回给他所有的朋友)。

@ActionClass
public class ClientNotificationUpdateAction {

  @ObjectSender
  private ConditionObjectSender conditionObjectSender;

  @Action
  public void updateStatus(FacebookUser user, UserStatus status) throws Exception {
    SendCondition sendToFriendsOfUser = new FiendsOfUserCondition(user);

    BristleMessage message = ActionMessageFactory
      .createMessage("ClientNotificationUpdate", "updateStatus", status);
    conditionObjectSender.sendMessage(message, sendToFriendsOfUser);
  }
}

关于3.确实并非所有的互联网浏览器都实现了WebSockets协议(特别是在移动设备中)