带有 websockets 连接的井字游戏

Posted

技术标签:

【中文标题】带有 websockets 连接的井字游戏【英文标题】:Tic tac toe with websockets connection 【发布时间】:2012-02-10 15:40:11 【问题描述】:

我正在尝试使用在 glassfish 上运行的 websocket 制作井字游戏。我已经从 git 下载了this example。首先,我想测试它,所以我在我的机器上将它作为一个普通的 java 进程运行。我还对 tictacto.js 做了一个小改动

  if (typeof MozWebSocket != "undefined")  // (window.MozWebSocket)
    appType = "Mozilla";
   else if (window.WebSocket) 
    appType = "Chrome";
   else 
    alert('ERROR: This browser does not support WebSockets');
  

然后

    if (appType == "Mozilla") 
     ws = new MozWebSocket(WEBSOCKET_URL);
     //alert('MozWebSocket');
    else 
     ws = new WebSocket(WEBSOCKET_URL);
     //alert('WebSocket');
   

当我使用 FF 10.0 打开测试页面时,仅调用 onclose 事件并且我得到状态“WebSocket 连接已关闭”。然后我用 Chrome 17.0.963.46 m 打开测试页面。状态也是“WebSocket....”,但服务器抛出异常。

run:
TicTacToe Server: Listening on port 9000
java.io.IOException: An established connection was aborted by the software in your host machine
    at sun.nio.ch.SocketDispatcher.read0(Native Method)
    at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
    at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:218)
    at sun.nio.ch.IOUtil.read(IOUtil.java:186)
    at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:359)
    at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:323)
    at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:282)
    at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:202)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)

原因是什么?我认为有几个可能的问题:

我使用 JBoss 存储库中的 Netty 3.2.6.Final。它可以使用与浏览器不同的 websockets 标准。 在我的机器上将它作为 java 进程运行,而不是作为网络服务器。但是 Netty 没有任何需要它的依赖项。 位置错误。 var WEBSOCKET_URL = "ws://localhost:9000/websocket";和 html 位置是 C:...web\kolo\src\main\webapp\t.html

我正在使用 Netbeans 7.1 和 glassfish 3.1

可以找到固定项目 https://github.com/lukasz-madon/Tic-Tac-Toe-with-WebSocket

【问题讨论】:

【参考方案1】:

我可能是网络套接字版本。这是table 的 Web 套接字版本以及哪个浏览器支持哪个版本。

根据记忆,3.2.6 只支持 HyBi-00。

试试Netty 3.3。它支持多个版本。

【讨论】:

记得使用 WebSocketX 包(而不是为了向后兼容而留下的 WebSocket 包)。

以上是关于带有 websockets 连接的井字游戏的主要内容,如果未能解决你的问题,请参考以下文章

带有井字游戏的 Minimax 算法(但每个玩家只能有 3 个 tacs)

Android,在一个简单的在线游戏中连接两个用户,比如井字游戏。

为啥我的神经网络不能正确分类这些井字游戏模式?

井字游戏使用 C++ 和多维数组 [关闭]

带有 Java ECONNREFUSED 的 Heroku Websockets(连接被拒绝)

带有 Node.js 和 socket.io 的 WebSockets