Java消息传递,java网络编程协调消息传递

我有2个进程在不同的机器上运行,它们通过TCP套接字进行通信.

这两个进程都具有既充当服务器又充当客户端的代码.

即ProcessA打开了一个服务器套接字,它在portX上绑定,ProcessB在portY上打开了一个服务器套接字绑定.

ProcessA打开客户端套接字以连接ProcessB并开始作为客户端发送消息

并接收响应(当然通过相同的tcp连接).

ProcessB一旦收到消息并对其进行处理,它就会发送响应,但也可以通过第二个tcp连接发送消息,即ProcessB已经打开了一个客户端套接字到ProcessA的portX.

因此消息流超过2个不同的tcp连接.

我的问题如下:认为这个“架构”不能改变,必须保持原样:

我有间歇性的问题,消息通过ProcessB已经打开客户端套接字的tcp连接从ProcessB发送到ProcessA,在消息通过ProcessA作为客户端连接的tcp连接从ProcessB发送到ProcessA之前到达processA插座.

即两种流动都会发生

(1)

ProcessA ---->(msg)----> ProcessB(PortY) (TCP1)

ProcessB does processing

ProcessB(portY)--->(response)----->ProcessA (TCP1)

ProcessB--->(msg)----->ProcessA(portX) (TCP2)

(2)

ProcessA ---->(msg)----> ProcessB(PortY) (TCP1)

ProcessB does processing

ProcessB--->(msg)----->ProcessA(portX) (TCP2)

ProcessB(portY)--->(response)----->ProcessA (TCP1)

编辑(在ejp请求之后)

我如何强制/确保ProcessB不会通过ProcessB将客户端套接字打开到ProcessA的服务器端口X的连接发送消息,之后作为来自ProcessB的服务器端口Y的消息发送到processA?即只有上述的流程(1).

请注意,processB是多线程的,处理非常重要.

更新:

可能是我的误解,但是当进程通过套接字发送数据并且控制权返回给应用程序时,这并不意味着接收方已经接收到数据.

因此,如果进程通过2个套接字发送数据,操作系统是否存在竞争条件?

UPDATE2

回答后我从Vijay Mathew那里得到了:

如果按照建议进行锁定,是否可以保证OS(即IP层)按顺序发送数据?即完成一次传输,然后发送下一个?或者我会将它们复用并具有相同的问题?

谢谢

解决方法:

明显的解决方案是:

LockObject lock;

ProcessA ---->(msg)----> ProcessB(PortY)

// Processing the request and sending its response

// makes a single transaction.

synchronized (lock) {

ProcessB does processing

ProcessB(portY)--->(response)----->ProcessA (TCP1)

}

// While the processing code holds the lock, B is not

// allowed to send a request to A.

synchronized (lock) {

ProcessB--->(msg)----->ProcessA(portX) (TCP2)

}

标签:java,tcp,networking,sockets,network-programming

来源: https://codeday.me/bug/20190705/1383013.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值