Tomcat中的Web套接字



我是web套接字新手。我学过一些实现web套接字的教程。但它不能正常工作。我不知道我做错了什么。
注意:我没有做任何配置(web.xml),我已经使用tomcat 7.0.47,jdk 1.6.0_24
这是我的服务器端代码:

package com.hmkcode;
import java.io.IOException;
import java.util.LinkedList;
import javax.websocket.EncodeException;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint(value="/websocket/{client-id}")
public class MyServerEndpoint {
    private static final LinkedList<Session> clients = new LinkedList<Session>();
    @OnOpen
    public void onOpen(Session session) {
        clients.add(session);
    }
    @OnMessage
    public void onMessage(String message,@PathParam("client-id") String clientId) {
        for (Session client : clients) {
            try {
                client.getBasicRemote().sendObject(clientId+": "+message);            
            } catch (IOException e) {
                e.printStackTrace();
            } catch (EncodeException e) {
                e.printStackTrace();
            }
        }
    }
    @OnClose
    public void onClose(Session peer) {
        clients.remove(peer);
    }
}

这是我的Web客户端代码

var URL = "ws://localhost:8080/WebSocket1/websocket/web-client";
var websocket;
$(document).ready(function(){
    connect(); 
});
function connect(){
        websocket = new WebSocket(URL);
        websocket.onopen = function(evnt) { onOpen(evnt);};
        websocket.onmessage = function(evnt) { onMessage(evnt); };
        websocket.onerror = function(evnt) { onError(evnt); };
}
function sendMessage() {
    websocket.send($("#message").val());
}
function onOpen() {
    updateStatus("connected");
}
function onMessage(evnt) {
    if (typeof evnt.data == "string") {
        $("#received_messages").append(
                        $('<tr/>')
                        .append($('<td/>').text("1"))
                        .append($('<td/>').text(evnt.data.substring(0,evnt.data.indexOf(":"))))
                        .append($('<td/>').text(evnt.data.substring(evnt.data.indexOf(":")+1))));
    }
}
function onError(evnt) {
    alert('ERROR: ' + evnt.data);
}
function updateStatus(status){
    if(status == "connected"){
        $("#status").removeClass (function (index, css) {
           return (css.match (/blabel-S+/g) || []).join(' ');
        });
        $("#status").text(status).addClass("label-success");
    }
}

我猜是…

因为你的ServerEndpoint映射了一个参数"{client-id}",它应该出现在你的客户端用来连接的URL中。

您可以在服务器端删除该参数,或者需要在客户端为其包含一个值。

再一次,只是猜测。如果您包含有关该问题的更多信息(例如,服务器日志)将会很有用

[]Heleno

相关内容

  • 没有找到相关文章

最新更新