首页 / JAVA / java网络编程协调消息传递
java网络编程协调消息传递
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java网络编程协调消息传递,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2065字,纯文字阅读大概需要3分钟。
内容图文
![java网络编程协调消息传递](/upload/InfoBanner/zyjiaocheng/775/4cda64d232da42d2b6efea599ac2b1c1.jpg)
我有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网络编程协调消息传递全部内容,希望文章能够帮你解决java网络编程协调消息传递所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。