我的目标是每当有人按下接受按钮时,会自动增加导航栏上的通知。
逻辑
1)管理员按下接受按钮
2)用户的导航栏将监听通知事件,并将增加计数的数量并将消息附加到li元素。
这里是我希望socket.io将更新的通知图片
但是,我没有看到任何实时更新
这是代码
socket.io客户端
<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
<script>
var socket = io.connect('http://localhost:3000');
$('form').submit(function(){
var companyName = $("#companyName").val();
var notification = "Accepted by " + companyName;
var user_id = $('#candidate_id').val();
var notificationCount = parseInt($('#notification').html());
noticationCount += 1;
socket.emit('notify', {notification: notification, userId: user_id, count: notificationCount});
});
socket.on('notify', function(msg){
$('#notification').html(msg.count);
$('#addNotification').append($('<li>').text(msg.notification));
});
</script>
HTML(EJS)代码 - 这是它应该更新的地方。
<li class="dropdown notifications-menu">
<span id='notification' class="label label-warning"><%= user.notifications.length %></span>
</a>
<ul class="dropdown-menu">
<li>
<ul class="menu" id="addNotification">
<% for(var i=0; i < user.notifications.length; i++) { %>
<li><!-- start notification -->
<a href="#">
<i class="fa fa-users text-aqua"></i> <%= user.notifications[i] %>
</a>
</li>
<% } %>
</ul>
</li>
</ul>
</li>
了Serverside
io.on('connection', function(socket){
socket.on('notify', function(msg){
User.findById({ _id: msg.userId}, function(err, found) {
if (typeof found === 'undefined') {
// Do something but what should I do?s
} else {
found.notifications.push(msg.notification);
found.save(function(err) {
console.log(msg.notification); // Doesnt even console.log the data.
});
}
});
});
});
我的目标再次是
1)有人提交了一个按钮,它将根据tag's id
id="user_id"
var notificationCount = parseInt($('#notification').html());
noticationCount += 1;
发出所有隐藏的输入值。
2)socket.on(&#39; notify&#39;) - &gt;将通过目标html标签的id实时监听和更新它
3)将数据保存在数据库中。
然而上面的实现,我必须刷新它然后我可以看到结果。 但是,如果我将此行添加到socket.io客户端代码
#define __CL_ENABLE_EXCEPTIONS // with cl.hpp
//#define CL_HPP_ENABLE_EXCEPTIONS // with cl2.hpp
#include <CL/cl.hpp>
int main(int argc, char *argv[])
{
try
{
// OpenCL code here
}
catch (cl::Error& err)
{
cout << err.what() << " failed with error code " << err.err() << endl;
}
}
它甚至不会将其保存到数据库中,还可以实时更新它。我
请借给我你的实时知识:)
答案 0 :(得分:0)
1)你不应该在cdn中包含socket.js文件,它应该像
一样加载 <script src="http://localhost:3000/socket.io/socket.io.js"></script>
您不需要在项目文件夹中的任何位置保存socket.io.js
文件,这由socket.io模块处理
2)我看到代码接收客户端消息到服务器,而不是从那里回到客户端。它看起来像这样(广播)
io.on('connection', function(socket){
socket.on('notify', function(msg){
// pass notification & count to client
io.emit('notify', {notification:msg.notification, count:your_msg_count});
....
我不会深入研究您的代码,希望这可以解决您的问题。