Доброе время суток, коллеги.
Подскажите как создать подключение по Websocket со стороны сервера
Нравится
Добрый день.
Не понял? Соединение по веб-сокетах клиент-серверное. Клиент отправил запрос, получил от сервера ответ и т.д.
С кем Вы будете соединятся со стороны сервера?
Вообще, с клиента, если подключить jQuery в Dependency можно соединиться с сервером:
function connect(host) { debug("Connecting to " + host + " ..."); try { ws = new WebSocket(host); // create the web socket } catch (err) { debug(err, 'error'); } ws.onopen = function () { debug("connected... ", 'success'); // we are in! :D }; ws.onmessage = function (evt) { debug(evt.data, 'response'); // we got some data - show it omg!! }; ws.onclose = function () { debug("Socket closed!", 'error'); // the socket was closed (this could be an error or simply that there is no server) }; };
Дмитрий, интересует как подключиться по websocket не с клиента, а с сервера BPM. Например при помощи конфигурационного сервиса.
Антон, куда подключиться?
WebSocket — протокол, предназначенный для обмена сообщениями между браузером и веб-сервером
Дмитрий, нужно обмениваться с сообщениями по Websocket не между браузером и вэб-сервером, а из вэб-сервиса на сервере BPM c неким вэб-сервисом
Вот класс, который будет слушать определенный порт (к примеру веб-сервис на сервере BPM)
class AuthServer { private TcpListener tcpListener; private Thread listenThread; private TcpClient[] clientList = new TcpClient[100]; private int n = 0; private string clientMessage; public string ClientMessage { get { return clientMessage; } } public AuthServer() { this.tcpListener = new TcpListener(IPAddress.Any, 8181); this.listenThread = new Thread(new ThreadStart(ListenForUsers)); this.listenThread.Start(); } public void ListenForUsers() { this.tcpListener.Start(); while (true) { //blocks until a client has connected to the server TcpClient client = this.tcpListener.AcceptTcpClient(); Console.WriteLine("{0} - Some1 connected!", DateTime.Now.Date.ToString()); clientList[n] = client; n++; //create a thread to handle communication //with connected client Thread clientThread = new Thread(new ParameterizedThreadStart(ReadDataFromClient)); clientThread.Start(client); } } private void ReadDataFromClient(object client) { TcpClient tcpClient = (TcpClient)client; NetworkStream clientStream = tcpClient.GetStream(); byte[] message = new byte[4096]; int bytesRead; while (true) { bytesRead = 0; try { //blocks until a client sends a message bytesRead = clientStream.Read(message, 0, 4096); } catch { //a socket error has occured break; } if (bytesRead == 0) { //the client has disconnected from the server Console.WriteLine("{0} - Some1 disconnected!", DateTime.Now.Date.ToString()); break; } //message has successfully been received ASCIIEncoding encoder = new ASCIIEncoding(); this.clientMessage = encoder.GetString(message, 0, bytesRead); ProcessClientMessage(this.ClientMessage, tcpClient); } tcpClient.Close(); } }
А вот клиент - некий веб-сервис:
class Program { static void Main(string[] args) { using (TcpClient client = new TcpClient()) { IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Loopback, 8181); //client.Client. client.Connect(serverEndPoint); using (NetworkStream clientStream = client.GetStream()) { Console.WriteLine("Connected? :" + client.Connected.ToString()); ASCIIEncoding encoder = new ASCIIEncoding(); byte[] buffer = encoder.GetBytes("login;password"); clientStream.Write(buffer, 0, buffer.Length); clientStream.Flush(); clientStream.ReadTimeout = 29000; byte[] message = new byte[4096]; int bytesRead = 0; bytesRead = clientStream.Read(message, 0, 4096); string msg = encoder.GetString(message, 0, bytesRead); Console.WriteLine("Message: " + msg); Console.ReadKey(); return; } } } }
Надеюсь это Вам чем то поможет.
Правда не понимаю причем тут BPM :)
Если вопрос еще актуален: в BPMonline 5.4 есть такая возможность, используется библиотека фреймворка http://websocket4net.codeplex.com/
Пример:
var webSocketClient = new WebSocket(address, "basic"); webSocketClient.OnOpen += (sender, e) => { /* some code */ }; webSocketClient.Connect(); result = openEvent.WaitOne(1000);