2015-12-09 56 views
0

消息我用Java春天4,我跟着教程Using websockets in Java using Spring 4WebSocket連接建立,但是客戶端不能接收來自其他

我的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    ... 
    <properties> 
     <java-version>1.8</java-version> 
     <org.springframework-version>4.2.0.RELEASE</org.springframework-version> 
     <org.aspectj-version>1.6.10</org.aspectj-version> 
     <org.slf4j-version>1.6.6</org.slf4j-version> 
    </properties> 

    <dependencies> 
     ... 

     <!-- Web Socket --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-websocket</artifactId> 
      <version>${org.springframework-version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-messaging</artifactId> 
      <version>${org.springframework-version}</version> 
     </dependency> 
    </dependencies> 
</project> 

我WebSocketHandler:

package com.example.smvcws; 

import org.apache.log4j.Logger; 
import org.springframework.web.socket.TextMessage; 
import org.springframework.web.socket.WebSocketSession; 
import org.springframework.web.socket.handler.TextWebSocketHandler; 

public class WebsocketEndPoint extends TextWebSocketHandler { 
    @Override 
    protected void handleTextMessage(WebSocketSession session, 
      TextMessage message) throws Exception { 
     TextMessage returnMessage = new TextMessage(message.getPayload()+" received at server"); 
     session.sendMessage(returnMessage); 
    } 
} 

這是我的XML配置:

<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans xmlns="http://www.springframework.org/schema/mvc" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:websocket="http://www.springframework.org/schema/websocket" 
    xsi:schemaLocation="http://www.springframework.org/schema/websocket http://www.springframework.org/schema/websocket/spring-websocket-4.1.xsd 
     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 

    ... 

    <beans:bean id="websocketEndPoint" class="com.example.smvcws.WebsocketEndPoint" /> 
    <websocket:handlers allowed-origins="*"> 
     <websocket:mapping path="/websocket" handler="websocketEndPoint" /> 
     <websocket:handshake-interceptors> 
      <beans:bean class="org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor" /> 
     </websocket:handshake-interceptors> 
    </websocket:handlers> 
</beans:beans> 

我的頁面的HTML(JSP)代碼:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="UTF-8"> 
    <title>Websocket Test</title> 
</head> 
<body> 
    <textarea></textarea> 
    <button>send</button> 
    <div id="result"></div> 

    <script type="text/javascript"> 
     var select = document.querySelector.bind(document) 
     var ws = new WebSocket('ws://' + location.host + "<%=request.getContextPath()%>/websocket") 
     ws.addEventListener("message", function(e){ 
      var div = document.createElement("div") 
      div.innerHTML += "<span>" + e.data + "</span>" 
      div.innerHTML += " @ " 
      div.innerHTML += "<time>" + (new Date(e.timeStamp)).toLocaleString() + "</time>" 
      select("#result").appendChild(div) 
     }) 

     select("button").addEventListener("click", function (e) { 
      switch(ws.readyState){ 
       case WebSocket.OPEN: 
       case WebSocket.CONNECTING: 
        ws.send(select("textarea").value) 
        break 
       case WebSocket.CLOSED: 
       case WebSocket.CLOSING: 
        select("#result").innerHTML += "<div style='color:FireBrick'>Error: Websocket is closed (<time>" + (new Date).toLocaleString() + "</time>)</div>" 
        break 
      } 

     }) 
    </script> 
</body> 
</html> 

WebSocket的連接是成功的。如果我發送任何消息,<div id="result">將打印消息。

但是,我無法接收其他人的信息。

例如:我用2個瀏覽器A,B來鏈接頁面。我在瀏覽器A中發送消息。該消息將顯示在瀏覽器A 中,但不會顯示在瀏覽器B中。

回答

1

你只是將消息發送到開始通信的一個會話開始...查看它的API,因爲我不熟悉Spring 4 ...應該有一個方式發送消息到全部連接的客戶端,而不僅僅是會話。

+0

謝謝。現在我使用'靜態列表'來保存所有的會話,它可以工作。 – Shiyou

+0

幹得好。 :)不幸的是我根本不知道Spring 4,所以我不能給你一個例子。但完成它的好工作! :) –

相關問題