【问题标题】:Webservice based socket client基于 Webservice 的套接字客户端
【发布时间】:2014-02-14 03:38:33
【问题描述】:

我正在开发基于套接字的 web 服务(套接字客户端)和外部服务器之间的通信。由于 web 服务是多线程的(服务器为每个服务请求创建一个线程),每个线程是否应该与外部服务器打开一个新的套接字(在给定端口上),或者套接字客户端应该在 web 服务线程之间同步和共享。 我在这里感到困惑。是否打开客户端套接字(java.net.Socket 的对象)是一个昂贵的对象,如 JDBC 连接,或者它可以(应该)由每个线程打开并在完成时由线程关闭。

请帮忙

谢谢

【问题讨论】:

    标签: java multithreading web-services sockets


    【解决方案1】:

    如果您正在谈论在客户端为对服务器的每个请求创建一个新的Socket,那么这是正确的方法。

    这正是带有标签的浏览器的工作原理。

    拥有一个同步的 Socket 意味着您需要有一个线程名称/id、请求 URL/或任何其他唯一 id 或任何其他 id 的映射/表,以识别请求来自哪个线程以及该请求来自哪个线程必须转发响应。这肯定会导致性能问题并且不可扩展。

    【讨论】:

    • 在所有线程共享同一个socket的场景下,可以使用blockQueues吗?由于线程可以产生请求和消耗响应,我可以让单例组件说“Soketer”,它持有套接字并有两个 BlockQueue(传入和传出)。传出队列上的任何消息都写入套接字,并且来自套接字的任何消息都发送到传入队列。所有线程都引用了 Sockert 对象。
    猜你喜欢
    • 2011-12-06
    • 2019-01-17
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多