2016-11-30 30 views

cevap

4

WebSocketClient'un% 100 dişli olduğunu garanti edemiyorum, ancak bunun belirli bir ölçüye kadar güvenli olması gerektiğini söyleyebilirim.

private synchronized void initializeClient() throws IOException 

ve connect yöntem kullandığını bir Executor:

// Execute the connection on the executor thread 
executor.execute(promise); 

sınıfın dokümantasyon şey diyor source code baktığımızda

, biz özel yöntem initializeClient senkronize görüyoruz iş parçacığı güvenliği hakkında, ancak connect yönteminden eşzamanlı initializeClient yönteminin çağrısı ve Executor kullanımı net imzadır Bir çeşit çoklu iş parçacığının desteklendiği.

== Düzenleme ==

Konu güvenliği genelde sadece operasyonların belirli türleri için garanti edilir. Örnekler için, sadece okuma işlemleri için değil, yazma işlemleri için garanti edilebilir. İş parçacığı güvenliği koşullarını tanımlamak için belgelerin rolü budur. Sergio Montoro'nun yorumu doğrudur, eğer bir evre bir başka iş parçacığı tarafından kullanıldığında nesneyi değiştirirse, tuhaf şeyler olabilir. WebSocketClient söz konusu olduğunda, iplik güvenliği kesinlikle nesnenin diğer dişler tarafından değiştirilmemesi veya WebSocketClient dahili durumunun senkronize ve uyumlu modifikasyonu ile sınırlıdır.

WebSocketClient amacı uzak WebSocket uç noktalarına bağlantı kurmaya bir ortalamasını sağlamaktır: the code burada niçin en az bir örnektir dan

+0

+1 WebSocketClient kesinlikle iş parçacığı için yazılmıştır. _code'un bazen bugs_ içerdiği gerçeği bunun çok iş parçacıklı kod olmadığı anlamına gelmez. –

4

O değil.

Bu, Gelecek Oturumunu döndüren connect() yöntemini çağırarak gerçekleştirilir. Pekala, şimdi

  1. Konu 1 WebSocketClient başlatır ve setCookieStore()

  2. Konu 1 aramalar connect(Object websocket, URI toUri) çağırır düşünün.connect() Konu 1 İçinde

  3. ClientUpgradeRequest request = new ClientUpgradeRequest(toUri) 
    

    ve

    yürütür
    request.setRequestURI(toUri) 
    
  4. Konu 2 Ardından Konu 1 yarattığı istek çerezleri tekabül olabilir setCookieStore(CookieStore cookieStore)

çalıştırır İplik URI 2. Diş güvenliği sağlamak için, tüm bağlantı işlemi sırasında nesnenin dahili durumu değiştirilemez olmalıdır.

+0

WebSocketClient'teki cookie Store, farklı çağrılar arasında paylaşılması gereken ortak çerezi ayarlamak için burada olduğundan emin değil. İstek başı çerezi, ClientUpgradeRequest'te setCookies ile ayarlanmalıdır. – benbenw

+0

cookieStore, thread'ler arasında paylaşılmak isteniyorsa, o zaman "volatile" olarak bildirilmelidir. Aksi halde bir iş parçacığı değeri değiştirebilir ve diğeri değişikliği göremez. Ayrıca sınıfta iki çerez kümesinin nasıl saklanacağını görmüyorum: iş parçacığı alt kümesi ve iş parçacığı alt kümesi arasında paylaşılır. Ayrıca, iki alt kümede bu şekilde çerezleri ayırmak için makul bir kullanım durumu düşünmek mümkün mü? –

İlgili konular