[英]How to broadcast a message using socketio
I am trying to broadcast a message using scketio.我正在尝试使用 scketio 广播消息。 Here is my JS File:
这是我的 JS 文件:
document.addEventListener("DOMContentLoaded", () => {
var socket = io.connect(
location.protocol + "//" + document.domain + ":" + location.port
);
socket.on("connect", () => {
document.querySelector(".create-channel-div").onsubmit = () => {
const contents = document.querySelector(".name").value;
socket.emit("channel created", { contents: contents });
return false;
};
socket.on("broadcasting channel", (someData) => {
const a = document.createElement("a");
a.innerHTML = `${someData.contents}`;
a.setAttribute("href");
document.querySelector(".stored-channels-div").append(p);
});
document.querySelector(".message-typed-div").onsubmit = () => {
let today = new Date();
let month = today.getMonth();
let date = today.getDate();
let hours = today.getHours();
let minutes = today.getMinutes();
const monthNames = [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December",
];
let current_time = `${monthNames[month]} ${date}, ${hours}:${minutes}`;
const selection = document.querySelector(".message-entered").value;
socket.emit("submit data", {
username: username,
selection: selection,
time_stamp: current_time,
});
return false;
};
socket.on("announce data", (data) => {
const p = document.createElement("p");
p.innerHTML =
`<span>${data.username}</span>` +
`</br>``<span>${data.selection}</span>` +
`</br>` +
`<span>${data.time_stamp}</span>`;
document.querySelector(".display-message").append(p);
// username = `<span>${data.username}</span>` + `</br>` +
});
});
});
Here is my Python file:这是我的 Python 文件:
import os
from flask import Flask, render_template, request, url_for, redirect, session
from flask_socketio import SocketIO, emit, join_room, leave_room
from time import localtime, strftime
app = Flask(__name__)
app.config["SECRET_KEY"] = "I0OeBc%W@6TdF#"
app.config["SESSION_TYPE"] = "filesystem"
app.config["SESSION_PERMANENT"] = False
socketio = SocketIO(app)
# localtime = strftime('%b-%d %I:%M%p', localtime())
@app.route("/", methods=["GET", "POST"])
def login():
if request.method == "POST":
user = request.form.get('user')
else:
return render_template("login.html")
@app.route("/chatroom")
def chatroom():
return render_template("chatting.html")
@socketio.on('submit data')
def sample(data):
username = data["username"]
selection = data["selection"]
time_stamp = data["time_stamp"]
# username = data["username"]
emit("announce data", {"username":username,"selection":selection, "time_stamp":time_stamp}, broadcast = True)
@socketio.on('join')
def on_join(data):
pass
@socketio.on('channel created')
def channel(someData):
contents = someData["contents"]
emit("broadcasting channel", {"contents":contents})
socketio.run(app)
When I entered a message(whose id is message-entered) everything works fine.当我输入一条消息(其 id 是消息输入)时,一切正常。 The message is getting displayed on multiple browsers.
该消息正在多个浏览器上显示。 But when I have written the same code to create the channel, then that is not getting broadcasted in multiple browsers.
但是,当我编写了相同的代码来创建频道时,就不会在多个浏览器中进行广播。 So is the code wrong?
那么代码错了吗?
Try giving broadcast=True
when you emit from your Python code.当您从 Python 代码发出时,请尝试给出
broadcast=True
。
@socketio.on('channel created')
def channel(someData):
contents = someData["contents"]
emit("broadcasting channel", {"contents":contents}, broadcast=True)
Maybe this does your work.也许这对你有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.