Websocket Hanshake menggunakan Node.js

Halo Semuanya, permisi...mau numpang tanya, adakah diantara semua member disini yang pernah punya pengalaman tentang melakukan handshake ke websocket menggunakan node.js atau expressJS atau angularJS?? jujur aja saya masih newbie dalam hal ini, dan saat ini saya lagi mencoba develop sebuah aplikasi chat realtime menggunakan nodejs, websocket dan mongodb, ketika dijalankan di server lokal,

ws://localhost:3000

tidak ada masalah... pada saat saya ingin konek untuk melakukan handshake ke server milik teman saya tidak bisa dan itu benar2 membuat saya kesusahan, udah googling kesan kemari tapi belum dapat jawaban yang pas, dan ketika konek pertama kali ke server milik teman saya itu :

ws://ip-adress:port

maka server tersebut merespon dengan mengirimkan code sbb :

WebSocket Test

CONNECTED

{"code":9,"publicKey":"bdce9f32e3303466","force":0,"version":"1.2"}

dan sekitar 5 detik kemudian....

DISCONNECTED!...

saya udah coba tanya ke teman saya tersebut, apa yang harus dilakukan ketika menerima pesan dari server seperti itu, dan dia cuma menjawab.... kamu harus mengenerate publicKey yang saya kirim menjadi PrivateKey menggunakan encrypt SHA256, kemudian privateKey tersebut kamu kirimkan kembali kepada saya...supaya antara client dan server tetap terkoneksi dan tidak terputus...(Handshake)

nah pertanyaan saya :

1. dengan cara apa saya mengenerate PrivateKey tersebut memakai node.js? kira2 contoh source codenya seperti apa ya? 2. bagaimana cara Client untuk merespon pesan tersebut secara realtime dan berjalan secara otomatis dibackround ketika menerima respon dari server berbentuk JSON Object seperti diatas?

mungkin bisa dicek kode berikut ini, apa kira2 yang harus ditambah...

ini index.js

new function() {
	var ws = null;
	var connected = false;

	var serverUrl;
	var connectionStatus;
	var sendMessage;

	var connectButton;
	var disconnectButton;
	var sendButton;

	var open = function() {
		var url = serverUrl.val();
		ws = new WebSocket(url);
		ws.onopen = onOpen;
		ws.onclose = onClose;
		ws.onmessage = onMessage;
		ws.onerror = onError;

		connectionStatus.text('OPENING ...');
		serverUrl.attr('disabled', 'disabled');
		connectButton.hide();
		disconnectButton.show();
	}

	var close = function() {
		if (ws) {
			console.log('CLOSING ...');
			ws.close();
		}
		connected = false;
		connectionStatus.text('CLOSED');

		serverUrl.removeAttr('disabled');
		connectButton.show();
		disconnectButton.hide();
		sendMessage.attr('disabled', 'disabled');
		sendButton.attr('disabled', 'disabled');
	}

	var clearLog = function() {
		$('#messages').html('');
	}

	var onOpen = function() {
		console.log('OPENED: ' + serverUrl.val());
		connected = true;
		connectionStatus.text('OPENED');
		sendMessage.removeAttr('disabled');
		sendButton.removeAttr('disabled');
	};

	//var onClose = function() {
		//console.log('CLOSED: ' + serverUrl.val());
		//ws = null;
	//};

	var onMessage = function(event) {
		var data = event.data;
		addMessage(data);
		console.log(data);
	};

	var onError = function(event) {
		alert(event.data);
	}

	var addMessage = function(data, type) {
		var msg = $('<pre>').text(data);
		if (type === 'SENT') {
			msg.addClass('sent');
		}
		var messages = $('#messages');
		messages.append(msg);

		var msgBox = messages.get(0);
		while (msgBox.childNodes.length > 1000) {
			msgBox.removeChild(msgBox.firstChild);
		}
		msgBox.scrollTop = msgBox.scrollHeight;
	}

	WebSocketClient = {
		init: function() {
			serverUrl = $('#serverUrl');
			connectionStatus = $('#connectionStatus');
			sendMessage = $('#sendMessage');

			connectButton = $('#connectButton');
			disconnectButton = $('#disconnectButton');
			sendButton = $('#sendButton');

			connectButton.click(function(e) {
				close();
				open();
			});

			disconnectButton.click(function(e) {
				close();
			});

			sendButton.click(function(e) {
				var msg = $('#sendMessage').val();
				addMessage(msg, 'SENT');
				ws.send(msg);
			});

			$('#clearMessage').click(function(e) {
				clearLog();
			});

			var isCtrl;
			sendMessage.keyup(function (e) {
				if(e.which == 17) isCtrl=false;
			}).keydown(function (e) {
				if(e.which == 17) isCtrl=true;
				if(e.which == 13 && isCtrl == true) {
					sendButton.click();
					return false;
				}
			});
		}
	};
}

$(function() {
	WebSocketClient.init();
});

dan ini index.html

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8"/>
	<title>Connect...</title>
	<link rel="stylesheet" type="text/css" href="css/reset.css"/>
	<link rel="stylesheet" type="text/css" href="css/style.css"/>
</head>
<body>
<div id="content">
	<fieldset>
		<legend>Server Location</legend>
		<div>
			<label>URL:</label>
			<input type="text" id="serverUrl" value="ws://"/>
			<button id="connectButton">Open</button>
			<button id="disconnectButton">Close</button>
		</div>
		<div>
			<label>Status:</label>
			<span id="connectionStatus">CLOSED</span>
		</div>
	</fieldset>
	<fieldset id="requestArea">
		<legend>Request</legend>
		<div>
			<textarea id="sendMessage" disabled="disabled"></textarea>
		</div>
		<div>
			<button id="sendButton" disabled="disabled">Send</button>
			[Shortcut] Ctr + Enter
		</div>
	</fieldset>
	<fieldset id="messageArea">
		<legend>Message Log <button id="clearMessage">Clear</button></legend>
		<div id="messages"></div>
	</fieldset>
</div>
<script type="text/javascript" src="lib/jquery-1.4.3.min.js"></script>
<script type="text/javascript" src="lib/sha256.js"></script>
<script type="text/javascript" src="index.js"></script>
</body>
</html>

avatar vanz
@vanz

2 Kontribusi 0 Poin

Dipost 7 tahun yang lalu

Belum ada Jawaban. Jadi yang pertama Jawaban

Login untuk ikut Jawaban