这是我的代码

function sendMessage()
{
 if(textMessage.value!=="close")
  {
    if(searchid==="John" && login_id==="Mary" || searchid==="Mary" && login_id==="John")
       {
        webSocket.send(textMessage.value);
        textMessage.value="";
       }
   }
  else
  {
   webSocket.close();
  }
}


我正在创建一个聊天应用程序并从服务器获取响应。首先服务器正在向与之连接的所有客户端发送响应,但是现在我将其转换为一对一的基于客户端的聊天,但是问题是如果约翰正在与玛丽这些聊天值放置在数据库中,加载页面时,我只能一次通过scriplet从数据库中获取数据,因此当用户要与dave聊天时如何实现它。那么我无法从数据库中获取值。

最佳答案

我完全理解您想自己写这篇文章,但是有很多框架可以帮助您处理复杂的问题,并让您专注于要解决的实际业务问题。

我们大多数时候都使用XSockets.NET,因为它非常适合我们的需求。
使用XSockets进行一对一聊天(或其他情况)非常容易,因为这完全是发布/订阅...。您还可以使用强大的扩展方法来过滤在服务器上向何处发送消息。

一个简单的示例聊天:
为了节省时间并使它变得愚蠢而简单,我将使用两个下拉菜单,在其中选择您的姓名和所在的城市。实际上不是1-1,但是这样您就可以理解这个概念。

JAVASCRIPT / MARKUP

<!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <title></title>
                <script src="Scripts/jquery-2.1.0.js"></script>
                <script src="Scripts/moment.js"></script>
                <script src="Scripts/XSockets.latest.js"></script>
                <script src="Scripts/knockout-3.1.0.js"></script>

                <script>
                //viewmodel for our messages
                var vm = {
                    messages : ko.observableArray([])
                }

                //xsockets connection
                var conn;
                $(function() {
                    ko.applyBindings(vm);
                    //Connect to our controller (Chat)
                    conn = new XSockets.WebSocket('ws://127.0.0.1:4502/Chat');

                    conn.onopen = function() {
                        //open, set city and username (for demo only)
                        conn.setProperty("UserName", $('#username').val());
                        conn.setProperty("City", $('#cities').val());

                        //listen for chatmesages
                        conn.on('chatmessage', function (d) {
                            //Add message to viewmodel
                            vm.messages.push(d);
                        });
                    }

                    //When we hit enter, send a message
                    $('input').on('keydown', function (e) {
                        if (e.keyCode == 13) {
                    //Build message, we do not need to set From since the server know who I am
                            var message = { Text: $(this).val(), Time: moment().format('MMMM Do YYYY, h:mm:ss a') };
                            conn.publish('chatmessage', message);
                        }
                    });

                    //When City or Username is changed, tell the server
                    $('#cities').on('change', function(d) {
                        conn.setProperty("City", $(this).val());
                    });
                    $('#username').on('change', function (d) {
                        conn.setProperty("UserName", $(this).val());
                    });
                });

            </script>
        </head>
        <body>
            <input type="text" placeholder="type here, enter to send"/>
            <select id="username">
                <option value="steve">steve</option>
                <option value="ben">ben</option>
                <option value="tomas">tomas</option>
            </select>
            <select id="cities">
                <option value="london">london</option>
                <option value="paris">paris</option>
                <option value="tokyo">tokyo</option>
            </select>
            <div data-bind="foreach:messages">
                <h5 data-bind="text:From + ' - ' + Time"></h5>
                <div data-bind="text:Text"></div>
            </div>
        </body>
        </html>


C#

using XSockets.Core.XSocket;
using XSockets.Core.XSocket.Helpers;

namespace SimpleChat
{
    public class ChatMessage
    {
        public string From { get; set; }
        public string Text { get; set; }
        public string Time { get; set; }
    }

    public class Chat : XSocketController
    {
        /// <summary>
        /// My name, we set this from javascript...
        /// </summary>
        public string UserName { get; set; }

        /// <summary>
        /// We only send to people being in the same city, we set it from javascript
        /// </summary>
        public string City { get; set; }

        /// <summary>
        /// A user sends a message
        /// </summary>
        /// <param name="chatMessage"></param>
        public void ChatMessage(ChatMessage chatMessage)
        {
            chatMessage.From = this.UserName;
            //Send only to the client(s) being in the same city, but you can ofcourse change ot to another user only etc
            this.SendTo(p => p.City == this.City, chatMessage,"chatmessage");
        }
    }
}


摘要
除了上面的代码,我唯一要做的就是创建一个新项目,然后


安装XSockets(以启动xsockets服务器)
安装XSockets.JsApi(用于通过websocket发布发布)
安装jQuery(因为我很懒)
安装Momoent.JS(适用于javascript中的日期)
安装淘汰表(用于模型绑定)
在App_Start中添加了一个XSockets引导程序(位于Add-> NewItem-> XSockets-> XSockets.Web.Bootstrapper下

08-18 06:53