【发布时间】:2014-04-06 08:22:09
【问题描述】:
在 tomcat-8 示例中,我看到了一个使用 HTML5 网络套接字进行聊天的示例。
代码如下所示
public class ChatAnnotation {
private static final Log log = LogFactory.getLog(ChatAnnotation.class);
private static final String GUEST_PREFIX = "Guest";
private static final AtomicInteger connectionIds = new AtomicInteger(0);
private static final Set<ChatAnnotation> connections =
new CopyOnWriteArraySet<>();
private final String nickname;
private Session session;
public ChatAnnotation() {
nickname = GUEST_PREFIX + connectionIds.getAndIncrement();
}
@OnOpen
public void start(Session session) {
this.session = session;
connections.add(this);
String message = String.format("* %s %s", nickname, "has joined.");
broadcast(message);
}
@OnClose
public void end() {
connections.remove(this);
String message = String.format("* %s %s",
nickname, "has disconnected.");
broadcast(message);
}
@OnMessage
public void incoming(String message) {
// Never trust the client
String filteredMessage = String.format("%s: %s",
nickname, HTMLFilter.filter(message.toString()));
broadcast(filteredMessage);
}
private static void broadcast(String msg) {
for (ChatAnnotation client : connections) {
try {
synchronized (client) {
client.session.getBasicRemote().sendText(msg);
}
} catch (IOException e) {
log.debug("Chat Error: Failed to send message to client", e);
connections.remove(client);
try {
client.session.close();
} catch (IOException e1) {
// Ignore
}
String message = String.format("* %s %s",
client.nickname, "has been disconnected.");
broadcast(message);
}
}
}
}
此代码向所有连接到服务器的客户端发送消息。
但我只想向“Guest1”发送消息。
我认为 for 循环必须改变。
如何仅向“Guest1”发送消息。
【问题讨论】:
-
你有没有尝试过这样做?
-
@endriu_l 是的,我试过但每次都失败
-
好的...那么问题出在哪里?您有一个循环,将消息一一发送给每个人,只需选择一个客户并将消息仅发送给他
-
@endriu_l 这样的循环怎么写
-
但是你已经拥有它了...在
broadcast方法中
标签: java tomcat websocket tomcat7 java-ee-7