Подключение по Websocket со стороны сервера

Доброе время суток, коллеги.

Подскажите как создать подключение по Websocket со стороны сервера

Нравится

6 комментариев

Добрый день.
Не понял? Соединение по веб-сокетах клиент-серверное. Клиент отправил запрос, получил от сервера ответ и т.д.
С кем Вы будете соединятся со стороны сервера?

Вообще, с клиента, если подключить 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);
Показать все комментарии