2017-04-20 42 views
0

我在節點上使用socket.io庫。我想通過逗號分割一個字符串具有相同用戶的不同散列(套接字ID),如果套接字ID的散列具有逗號,則此解決方案將中斷。socket.io哈希的套接字ID可以使用逗號?

例如,我要保存這個字符串:

[email protected]:xlCGTJrldYLAs8eoAAAD,nLS5Avb1WHdwarrjAAAC 

如果插座ID散有逗號,分割功能不起作用

編輯:

我的代碼:

var s = "[email protected]:xlCGTJrldYLAs8eoAAAD,nLS5Avb1WHdwarrjAAAC" 
var dd = s.split(":"); 
dd[1].split(","); 
//result ["xlCGTJrldYLAs8eoAAAD", "nLS5Avb1WHdwarrjAAAC"] 

這段代碼很好用,但是如果ID的socket.io散列有「:」或「,」我的代碼中斷 謝謝!

+0

恐怕你的問題根本不清楚。誰/什麼產生這個字符串?你想要分裂什麼,用什麼代碼,你期望什麼,你會得到什麼? – jcaron

+0

感謝您的評論。我生成保存所有套接字id連接的字符串。我嘗試在「:」之後拆分所有內容: –

+0

您不回答一半的問題。 – jcaron

回答

1

由socket.io生成的socket.io標識符不會包含逗號,除非您使用的逗號是名稱空間。

要理解它們可以包含的內容,需要查看socket.io代碼以查看id是如何生成的。雖然socket.io內置在許多不同的層在多個倉庫(其通過代碼有些困難使得偵探)時,ID生成遵循此路徑:

engine.io/server.js on line 281

var id = this.generateId(req); 

而且,則genereateId method

Server.prototype.generateId = function (req) { 
    return base64id.generateId(); 
}; 

而且,​​返回base64編碼值。並且,base64 encoding本身不包含逗號。

所以,你可以得出結論,由socket.io生成的id值的核心部分將不會有逗號。

有socket.io代碼,可以作爲shown here命名空間和散列值添加到ID的開頭:

this.id = nsp.name !== '/' ? nsp.name + '#' + client.id : client.id; 

其中client.idbase64id.generateId()在前面的代碼生成的ID。

如果您未使用帶逗號的名稱空間,則socket.id不應包含逗號。如果您使用的逗號在其中,那麼socket.id可能包含逗號。