这是我的代码
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();
}
}
我正在制作聊天应用程序并从服务器获得响应。首先,服务器正在向连接到它的所有客户端发送响应。但现在我将其转换为一对一的基于客户端的聊天,但问题是如果john正在聊天与mary这些值放在数据库中,我只能在加载页面时通过scriplet从数据库中获取数据,所以当用户想与dave聊天时如何实现它。然后我无法从中获取值数据库中。
答案 0 :(得分:2)
我完全明白你想自己写这个,但是有很多框架可以帮助你处理复杂的事情,让你专注于解决实际的业务问题。
我们大多数时候都使用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");
}
}
}
<强>摘要强> 除了上面的代码,我唯一做的就是创建一个新项目然后
答案 1 :(得分:1)
我想你只需要为你的程序添加控制功能: 添加两个列表框和两个用于选择发件人,接收者(search_id,log_id)的按钮
List <string> logins=new List<string>();
List <string> search=new List<string>();
........
logins.Add("John");
logins.Add("Mary");
.....
search.Add("Dave");
listBox1.Datasource=logins;
listBox2.Datasource=search;
private void button1_Click(object sender, EventArgs e) //pick login_id
{
login_id_to_Compare=listBox1.SelectedValue.ToString();
}
private void button2_Click(object sender, EventArgs e) //pick searcid
{
searchid_to_Compare=listBox2.SelectedValue.ToString();
}
function sendMessage()
{
if(textMessage.value!=="close")
{
if((searchid===searchid_to_Compare) && (login_id===login_id_to_Compare))
{
webSocket.send(textMessage.value);
textMessage.value="";
}
}
else
{
webSocket.close();
}
}
答案 2 :(得分:1)
您的发送消息似乎过于简单了。服务器没有足够的信息将消息路由到正确的目的地。
您需要将消息与目的地一起发送,以便您的服务器可以将消息路由到正确的用户。
在您的数据库中,您可以将&#34;保存到&#34; &#34;来自&#34;并仅为相关各方显示正确的信息。
您当然必须将字段添加到聊天程序中以选择目的地。
function sendMessage(from, to, msg)
{
webSocket.send("{'from':" + from + ", 'to':" + to + ", 'msg': " + msg + "}");
}