Java websocket主机?

我正在尝试一些多人游戏的想法,我正在尝试创建一个Java应用程序来提供基于Web浏览器的多人游戏。

我的开发环境是主机上的Eclipse,以及笔记本电脑上的记事本+谷歌浏览器。

我在客户端使用javascript创建websocket,并在服务器端使用java.net.Socket。

我已经设法在两端确认连接,但似乎无法在客户端关闭连接的情况下发送或接收它们之间的任何数据(甚至没有错误;只是看起来吓坏了某事并调用套接字。关)。

有没有人有任何想法?

这是一些代码:

客户:

 var socket; function init() { socket = new WebSocket("ws://192.168.0.3:10000"); socket.onopen = function() { alert('OPEN: ' + socket.readyState); } socket.onmessage = function (msg) { alert('DATA: ' + msg.data); } socket.onerror = function (msg) { alert('DATA: ' + msg.data); } socket.onclose = function () { alert('CLOSED: ' + socket.readyState); } } function onClick() { socket.send("YAY!"); }  

服务器:

 public static void main(String args[]) { System.out.printLn("Websocket server test"); ServerSocket connectSocket = null; try { Socket clientSocket; connectSocket = new ServerSocket(10000); System.out.printLn("Waiting for connection..."); clientSocket = connectSocket.accept(); System.out.printLn("Got one!"); PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); BufferedReader in = new BufferedReader( new InputStreamReader(clientSocket.getInputStream())); for(int i=0;i<100;i++) //Shit but easy { String data = in.readLine(); System.out.printLn("Got data: " + data); out.printLn("YAY!"); } } catch (IOException e) { System.out.printLn("You fail: " + e.getMessage()); } System.out.printLn("Finished!"); } 

我建议你使用像jWebSocket这样的现有解决方案,而不是在Java中实现规范的痛苦方式。

此外,如果您不介意离开Java土地,我还建议您查看服务器的Node.js。

在JavaScript中同时执行服务器和客户端将为您节省大量时间和大量代码,尤其是因为JSON不能很好地适应静态域。 在Node.js中创建多人游戏服务器也是微不足道的,因为基于事件的单线程模型非常适合整个事情。

有关WebSocket的更多信息,请参阅常见问题解答 。 如果您想开始使用Node.js,请查看TagWiki 。

无耻的插头如下

对于使用Node.js编写的两个多人游戏,请查看我的GitHub页面 。

我建议我们的高级解决方案: Bristleback Server 。 它包含服务器和客户端,您可以从几个现有的低级WebSocket引擎(如Jetty,Netty或Tomcat)中进行选择,使用Bristleback进行开发是极其快速和简单的。 但是,它仍然是Beta,我们正在努力发布最终的1.0.0版本。 如果您使用Maven,我们提供了一个准备使用Web应用程序的原型。

我是Bristleback Server的共同创建者之一。

试试这个lib – https://github.com/mrniko/netty-socketio

基于高性能套接字lib Netty。 它支持Socket.IO服务器的最新协议。 几种运输包括websocket

在Web端使用Socket.IO客户端javascript lib:

  

因为没有人真正回答你的问题:它不起作用的原因是因为你没有实现websocket规范。 设置正确的websocket连接比打开套接字要花费更多的工作,因为websocket连接设置以HTTP升级请求开始。 您的客户端正在关闭连接,因为它在升级请求中没有得到肯定的答案。

我无法帮助您使用套接字,但我可以建议您使用RMI技术吗? 我正在尝试在java中制作多人RPG,并且我在服务器和客户端之间使用远程方法调用(也可以从服务器回调客户端)。 它很容易使用它,但它使用TCP而不是UDP。 在局域网体验中没有任何延迟,在互联网上我还没有尝试过。 但是,如果您的游戏在请求和响应之间容忍一点延迟,则没有问题。 这是我的项目的链接,Client和Server类可能对您有用。