C-Node를 생성해야하는 Erlang 개발 시점입니다 (C-Node 문서의 경우 link 참조). 기본 구현은 간단하지만 문서에 큰 구멍이 있습니다.스레드 된 Erlang C 노드 (cnode) 상호 운용성 howto?
이 코드는 단일 스레드 클라이언트와 서버를 구현합니다. 잠시 동안 클라이언트 무시하기 ... 서버를 구현하는 'c'코드는 단일 스레드이며 한 번에 하나의 erlang 클라이언트에만 연결할 수 있습니다. A의
- 실행 EPMD ('EPMD -daemons')
- 실행 서버 애플리케이션 ('cserver 1234')
- 실행 얼랑 클라이언트 애플리케이션 ('ERL -sname E1 -setcookie secretcookie') 서버가 실행 중인지 3
지금에서 # 얼랑 쉘에서 (') foo는 (3. complex3를') 및 전류 얼랑 쉘가 갖는 다른 윈도우 # 2]와
- 새로운 창이 열립니다.
- erlang 클라이언트를 시작하십시오 ('erl -sname e2 -setcookie secretcookie').
- 새 서버 명령 ('complex3 : foo (3).')을 실행하십시오.
시스템이 멈춘 것처럼 보입니다. 명령이 실행되어야하는 것 같습니다. 다른 erlang 노드가 연결되어 있고 연결을 청취하는 다른 스레드가 없기 때문에 매달린 이유가 있습니다.
참고 : 연결 처리에 버그가있는 것 같습니다. 수신 블록에 타임 아웃을 추가했는데 잘못된 행동을 잡았지만 완전히받지 못했습니다. 또한 표시된 단계가 수행 된 후 첫 번째 오류 노드를 강제 종료하면 경고 또는 오류없이 cserver를 중단시킬 수있었습니다.
그래서 질문 ... 스레드 C 노드를 구현하는 가장 좋은 방법은 무엇입니까? 합리적인 수의 연결은 무엇입니까?
크래시의 특성을 확인하기 위해 서버가 SIGPIPE를 수신하고 있음을 보여주는 gdb를 사용하여 코드를 실행했습니다. 나는 그 시그널을 시그널 (SIGPIPE, SIG_IGN)로 방어했다. – Richard
이것이 귀하의 질문에 대한 답이라면, 그 질문을 대답에 넣고 그 대답을 "받아들이십시오". 그러면이 질문은 "대답 된"목록에 나타납니다. – ndim