【问题标题】:Web Socket in Tomcat 7Tomcat 7 中的 Web 套接字
【发布时间】:2014-05-03 07:46:21
【问题描述】:

我是网络套接字的新手。我已经学习了一些教程来实现 web socket。但它不能正常工作。我不知道我做错了什么。
注意:我没有做任何配置(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");
    }
}

【问题讨论】:

  • '但它不能正常工作' - 究竟是什么不工作?
  • 错误:“ws://localhost:8080/WebSocket1/websocket/web-client”无法建立连接。此错误消息显示在浏览器控制台中。

标签: java javascript sockets websocket tomcat7


【解决方案1】:

我的猜测是……

由于您的 ServerEndpoint 映射了一个参数“{client-id}”,因此它应该出现在您的客户端用于连接的 URL 中。

要么在服务器端删除参数,要么需要在客户端为其添加一个值。

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

[]s 海伦诺

【讨论】:

    猜你喜欢
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 2016-12-25
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    相关资源
    最近更新 更多