https://netmq.readthedocs.io/에있는 간단한 수신/요청 소켓 예제 중 하나를 가져 와서 무한 루프의 parametrizedThread와 함께 사용하려고했습니다. 코드는 비 - 블로킹 소켓 작업 내가이 위의 첫 번째 루프 후 즉시 발생해야 뭐가 들어 즉시루프시 NetMQ 수신/응답이 작동하지 않음
완료 할 수없는
발생 후, 몇 루프를 위해 잘 작동 무작위로가 아니라. 여기서 문제는 무엇입니까? 뭔가 깨끗한 연결을 다시하기 위해 플러시되어야하는 것 같습니다 (확실하지 않음).
class Program { public class Connector { public String connection { get; set; } public ResponseSocket server { get; set; } public Connector(string address, ResponseSocket server_) { this.connection = address; this.server = server_; } } static void Main(string[] args) { string connection = "tcp://localhost:5555"; using (var server = new ResponseSocket()) { while (true) { try { server.Bind(connection); } catch (NetMQException e) { Console.WriteLine(e.ErrorCode); } Connector c = new Connector(connection, server); ParameterizedThreadStart parametrizedClientThread = new ParameterizedThreadStart(runClientSide); Thread t = new Thread(parametrizedClientThread); t.Start(c); //runClientSide(connection, server); } } } private static void runClientSide(object param) { Connector conn = (Connector)param; string connection = conn.connection; ResponseSocket server = conn.server; using (var client = new RequestSocket()) { client.Connect(connection); client.SendFrame("Hello"); string fromClientMessage = server.ReceiveFrameString(); Console.WriteLine("From Client: {0}", fromClientMessage); server.SendFrame("Hi Back"); string fromServerMessage = client.ReceiveFrameString(); Console.WriteLine("From Server: {0}", fromServerMessage); //Console.ReadLine(); } }
동일한 포트 번호를 사용하는 서버에 대한 연결은 하나만 열 수 있습니다. 새 연결을 열기 전에 연결을 닫거나 각 메시지 이후에 연결을 닫지 않아야합니다. while 루프가 잘못되었습니다. – jdweng
루프가 문제가 아닌지 확실하지 않습니다. 실제로 parametrizedThread 부분을 제거하고 주석 처리 된 메서드 (밑의 입력 매개 변수 수정)를 사용하면 루프에서 코드가 제대로 작동합니다. 요청/응답이 스레드로부터 안전하지 않다는 것을 알고 있습니다. 무엇이 잘못되었는지 확신하지 못합니다. – yp10
main() 메서드는 스레드 스레딩과 동일한 프로세스가 아니며 "Invoke"를 사용하여 두 프로세스간에 데이터를 전송해야합니다. – jdweng