草庐IT

Java websocket 主机?

coder 2023-09-01 原文

我目前正在尝试一些多人游戏的想法,并正在尝试创建一个 Java 应用程序来为基于网络浏览器的多人游戏提供服务。

我的开发环境是主机上的Eclipse, native 上的notepad + Google Chrome。

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

我已经设法让两端都确认了连接,但如果客户端不关闭连接,似乎无法在它们之间发送或接收任何数据(甚至没有错误;只是似乎对某些事情感到害怕并且调用 socket.close)。

有没有人有什么想法?

这是一些代码:

客户:

<script type="text/javascript">
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!");
}
</script>

服务器:

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!");
}

最佳答案

与其采用痛苦的方式实现 spec在 Java 中,我建议您使用现有的解决方案,例如 jWebSocket .

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

在 JavaScript 中同时执行服务器和客户端将为您节省大量时间和大量代码,尤其是因为 JSON 不太适合静态环境。在 Node.js 中创建多人服务器也很简单,因为基于事件的单线程模型非常适合整个过程。

有关 WebSocket 的更多信息可以在 FAQ 中找到.如果您想开始使用 Node.js,请查看 TagWiki .

无耻的插件跟着

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

关于Java websocket 主机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4292624/

有关Java websocket 主机?的更多相关文章

  1. ruby - 即使失败也继续进行多主机测试 - 2

    我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r

  2. ruby - 从 Ruby 中的主机名获取 IP 地址 - 2

    我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge

  3. ruby - 允许主机名包含下划线的 URI.parse 的替代方法 - 2

    我正在使用DMOZ的listofurltopics,其中包含一些具有包含下划线的主机名的url。例如:608609TheOuterHeaven610InformationandimagegalleryofMcFarlane'sactionfiguresforTrigun,Akira,TenchiMuyoandotherJapaneseSci-Fianimations.611Top/Arts/Animation/Anime/Collectibles/Models_and_Figures/Action_Figures612虽然此url可以在网络浏览器中使用(或者至少在我的浏览器中可以使用:

  4. Ruby 服务器在本地主机(teambox)之外非常慢 - 2

    我刚刚在我的Ubuntu9.10服务器上安装了TeamBox。我使用提供的服务器脚本在端口3000上启动并运行它。它的运行速度非常慢,从另一台计算机连接时每个HTTP请求最多需要30秒。我使用链接从shell加载TeamBox,一点也不花时间。然后我设置了一个SSH隧道,它再次运行得非常快。我通过此服务器上的apache以及SAMBA等运行了大约30个虚拟主机,没有任何问题。我该如何解决这个问题? 最佳答案 我的redmine(ruby,webrick)太慢了。现在我解决了这个问题:apt-getinstallmongrelruby

  5. ruby-on-rails - 无法访问 ruby​​ on rails 上的本地主机 - 2

    当我运行服务器并转到localhost:3000时,我收到此错误:ActiveRecord::ConnectionNotEstablishedNoconnectionpoolwithidprimaryfound.有问题的代码:activerecord(5.0.0)lib/active_record/connection_adapters/abstract/connection_pool.rb:874:in`retrieve_connection' 最佳答案 我会发表评论,但我缺乏声誉。反正这个错误有时候是sqlite版本导致的。我建

  6. ruby-on-rails - 更新 Ruby-Gems 时出现未知主机错误 - 2

    我正在尝试使用以下方法更新ruby​​gems:gemupdate--system但是我得到了错误:ERROR:Whileexecutinggem...(Gem::RemoteFetcher::UnknownHostError)nosuchname(https://rubygems.org/specs.4.8.gz). 最佳答案 不确定您安装的是哪个版本的ruby​​gems,但是可以通过三种方式修复:网络问题-稍后重试。您的版本已变砖无法更新,您需要以其他方式安装NOTE:RubyGems1.1and1.2haveproblems

  7. ruby-on-rails - 子域 + ActionView::Template::Error(缺少要链接的主机!) - 2

    我已经解决了标题中描述的错误的众多解决方案。ActionView::Template::Error(缺少要链接的主机!请提供:host参数,设置default_url_options[:host],或将:only_path设置为true):但是,该项目还修改了url_for函数以使用子域,如本railscast所示:http://railscasts.com/episodes/221-subdomains-in-rails-3因此,这个错误的传统答案,例如在我的环境设置中设置变量似乎不是解决方案。这里有一些其他的提示:这是一个全新的设置,我刚刚克隆了一个项目并安装了ruby​​、rai

  8. 阿里云,华为云,腾讯云三大公有云厂商,香港地区主机测评 - 2

    三大公有云厂商,香港地区主机测评一、ping时延比对(厦门电信本地测试):Ping时延测试腾讯云阿里云华为云延迟率最低时延44ms,最高72ms,平均46ms47.242段:最低时延59ms,最高204ms,平均107ms最低时延45ms,最高93ms,平均47ms丢包率丢包率小有的ip段丢包率较大每个段都会有概率丢包阿里云:47.242段:最低时延59ms,最高204ms,平均107ms,有的ip段丢包率较大8.210段:最低时延64ms,最高232ms,平均119ms,丢包率较好腾讯云:最低时延44ms,最高72ms,平均46ms,丢包率小华为云:最低时延45ms,最高93ms,平均47m

  9. ruby-on-rails - 在 Rails 中使用主机和多个路径字符串创建 URL - 2

    我想使用端点和路径或主机和路径创建URL。不幸的是URI.join不允许这样做:pry(main)>URI.join"https://service.com","endpoint","/path"=>#pry(main)>URI.join"https://service.com/endpoint","/path"=>#我想要的是:"https://service.com/endpoint/path"。我怎样才能在Ruby/Rails中做到这一点?编辑:由于URI.join有一些缺点,我很想使用File.join:URI.join("https://service.com",File.j

  10. VMware虚拟机与本地主机进行磁盘共享(详解) - 2

    VMware虚拟机与本地主机进行磁盘共享前提虚拟机版本为Windows10(专业版,不是可能有问题)本地主机为家庭版或学生版(此版本会有问题,但有替代方式)最好是专业版VMware操作1.关闭防火墙,全部关闭。2.打开电脑属性3.点击共享-》高级共享-》权限4.如果没有everyone,就添加权限选择完全控制,然后应用确定。5.打开cmd输入lusrmgr.msc(只有专业版可以打开)如果不是专业版,可以跳过这一步。点击用户-》administrator密码要复杂密码,否则不行。推荐admaiN@1234类型的密码。设置完密码,点击属性,将禁用解开。6.如果虚拟机的windows不是专业版,可

随机推荐