2017-10-29 2 views
0

나는 트랜잭션 데이터를 저장하는 데 사용되는 Mule Object Store에 대한 많은 예제를 보았습니다. 그러나 내 질문은 웹 소켓 연결 또는 서버 보낸 이벤트 (SSe) 연결 같은 것을 저장하는 데 사용할 수 있습니까?뮬 객체 저장소를 사용하여 HTTP 연결을 유지할 수 있습니까?

이들은 장기 실행 연결입니다. 나중에 같은 이벤트에서 &이 전송되어야 할 때 나중에 사용하기 위해 어딘가에 저장해야합니다. 이 연결 정보를 저장하는 가장 좋은 방법은 무엇입니까?

명백히 connection-id를 Key로 사용할 수 있으며 Connection의 해시 형식을 Value로 저장할 수 있습니까? 이것이 가능한가? 아무도 나를 가리킬 수있는 예가 있습니까?

+0

을 나는 Javascript'Map' 객체를 사용한다고 말하고 싶다. akMap')에 id를 키로, 연결 객체를 값으로 사용합니다. 이러한 것들은 Javascript에서 메모리에 저장되어야하므로 보통 라이브 Javascript 객체를 처리 할 수있는 in-process 메모리 저장소가 아니면 예외를 외부 저장소에 넣을 수 없습니다. – jfriend00

답변

0

webSocket 연결은 간단한 JSON 개체의 방식대로 유지할 수없는 라이브 개체입니다. 그것의 구현 내부의 실제 TCP 소켓에 대한 포인터를 포함합니다. 따라서이를 일종의 메모리 내 및 in-process 저장소 또는 데이터 구조에 저장해야합니다.

ID를 사용하여 이미 액세스 할 수있는 간단한 키가있는 것 같기 때문에 Map 또는 WeakMap 개체 중 하나를 제안합니다.

let socketMap = new Map(); 

때마다 새로운 소켓에 연결 :

// add new connection to the map 
socketMap.set(id, socket); 

때마다 소켓의 연결이 끊어 :

// remove disconnected socket from the map 
socketMap.delete(id); 

특정 소켓을받을 필요가 모든 시간 :

let socket = socketMap.get(id); 
+0

jsriend 답장을 보내 주셔서 감사합니다. Mule Object Store를 사용하여 Websocket 또는 SSE Connection을 보관하기위한 저장 메커니즘으로 사용할 수 없습니다. 메모리 또는 In Process와 같은 구조가 Map과 같은 방법으로 보인다. 그러나 JVM을 종료하거나 Mule 종료가 발생하면 해당 연결 참조가 손실됩니다. 어떻게 연결을 유지할 수 있으며 새로운 연결을 다시 열고 싶지 않습니다. – insaneyogi

관련 문제