부두 9.3Jetty websocket 클라이언트 클래스는 WebSocketClient 스레드로부터 안전합니까?
자바는 8
는 org.eclipse.jetty.websocket.client.WebSocketClient
스레드 안전합니다.
복수 스레드가이 클래스의 단일 인스턴스를 사용하여 웹 소켓 세션을 만들 수 있습니까 (connect
메서드 사용)?
부두 9.3Jetty websocket 클라이언트 클래스는 WebSocketClient 스레드로부터 안전합니까?
자바는 8
는 org.eclipse.jetty.websocket.client.WebSocketClient
스레드 안전합니다.
복수 스레드가이 클래스의 단일 인스턴스를 사용하여 웹 소켓 세션을 만들 수 있습니까 (connect
메서드 사용)?
나는 WebSocketClient
이 100 % 스레드 안전하다는 것을 보장 할 수는 없지만, 어느 정도 스레드 안전성을 보장한다고 말할 수 있습니다.
private synchronized void initializeClient() throws IOException
을하고 connect
방법을 사용하고 있음을 Executor
:
// Execute the connection on the executor thread
executor.execute(promise);
클래스의 문서는 아무것도 말한다없는 source code 보면
는, 우리는 개인 방법 initializeClient
가 동기화되는 것을 볼 수 thread의 안전성에 관해서는, 그러나, connect
메서드로부터의 동기화 된 initializeClient
메서드의 호출과 Executor
의 사용은, clear sig 어떤 형태의 멀티 스레딩이 지원됩니다.
== 편집 ==
스레드 안전은 종종 작업의 특정 유형을 보장한다. 예를 들어 읽기 조작에만 보장되고 쓰기 조작에는 보장 될 수 없습니다. 이것은 스레드 안전 조건을 정의하는 문서의 역할입니다. Sergio Montoro의 말은 맞습니다. 하나의 스레드가 다른 스레드에 의해 사용되는 동안 객체를 수정하면 이상한 일이 발생할 수 있습니다. WebSocketClient
의 경우 스레드 안전성은 다른 스레드에 의한 개체의 비 수정이나 내부 상태의 동기화되고 일치 된 수정에만 확실히 제한됩니다.
WebSocketClient
의 목적은 원격 웹 소켓 엔드 포인트에 대한 연결을 확립 평균을 제공하는 것입니다 : the code 여기 왜 적어도 하나의 예이다에서
그것은 아니다.
이 작업은 Future Session을 반환하는 connect()
메서드를 호출하여 수행됩니다. 좋아, 이제
스레드 1이 WebSocketClient
을 인스턴스화하고 setCookieStore()
스레드 1 개 통화 connect(Object websocket, URI toUri)
호출 상상.connect()
스레드 1 내부
가
ClientUpgradeRequest request = new ClientUpgradeRequest(toUri)
및
실행request.setRequestURI(toUri)
스레드 2이어서 실 (1)에 의해 생성 된 요청은 쿠키에 대응 가질 수 setCookieStore(CookieStore cookieStore)
실행 스레드의 URI 2.
스레드 안전을 보장하기 위해 개체의 내부 상태가 전체 연결 프로세스 중에 수정 불가능해야합니다.
WebSocketClient에있는 쿠키 저장소가 다른 호출간에 공유되어야하는 공통 쿠키를 설정하는지 확인하지 못했습니다. 요청 별 쿠키는 ClientUpgradeRequest에서 setCookies로 설정해야합니다. – benbenw
쿠키 저장소가 여러 스레드에서 공유되도록 의도 된 경우에는 '휘발성 (volatile)'으로 선언해야합니다. 그렇지 않으면 스레드가 값을 변경할 수 있고 다른 스레드는 변경 사항을 볼 수 없습니다. 또한 클래스에서 두 세트의 쿠키를 유지하는 방법을 보지 못했습니다. 즉, 스레드 하위 집합과 스레드 하위 집합간에 공유됩니다. 또한, 쿠키를 두 개의 하위 집합으로 나누는 합리적인 사용 사례를 생각할 수 있습니까? –
+1 WebSocketClient는 thread-safe로 작성되었습니다. _code가 때때로 bugs_를 포함 할 수 있다는 사실은 이것이 다중 스레드 코드가 아니라는 것을 의미하지는 않습니다. –