我正在尝试将socket.io与trapi集成在一起。但是不幸的是,如果没有任何有关此方面的适当教程或文档,我将无法做到这一点。
我跟随着我在网上找到的唯一资源: https://medium.com/strapi/strapi-socket-io-a9c856e915a6 但是我认为这篇文章已经过时了。我似乎无法运行其中提到的代码而不会遇到大量错误。
以下是我尝试实现的尝试,我一直在尝试通过chrome websocket插件智能websocket客户端进行连接,但是尝试运行服务器时没有任何反应。
我完全处于黑暗中。任何帮助将不胜感激
module.exports = ()=> {
// import socket io
var io = require('socket.io')(strapi.server)
console.log(strapi.server) //undefined
// listen for user connection
io.on('connect', socket => {
socket.send('Hello!');
console.log("idit")
// or with emit() and custom event names
socket.emit('greetings', 'Hey!', { 'ms': 'jane' }, Buffer.from([4, 3, 3, 1]));
// handle the event sent with socket.send()
socket.on('message', (data) => {
console.log(data);
});
// handle the event sent with socket.emit()
socket.on('salutations', (elem1, elem2, elem3) => {
console.log(elem1, elem2, elem3);
});
});
};
答案 0 :(得分:8)
所以我找到了解决方案。好极了。我把它放在这里,以防万一有人需要它。
boostrap.js
setFilter(entries.filter((key) => key.speak.includes("Afrikaans")));
在https://github.com/strapi/strapi/issues/5869#issuecomment-619508153 _
找到了显然,服务器启动时socket.server不可用。因此,您必须利用等待socket.server初始化的process.nextTick。
我还将添加一些设置时遇到的问题。
我如何从nuxt,vue等外部客户端进行连接或做出反应?
您只需通过“ http:// localhost:1337”进行连接,这是我通常使用的bandi地址。
我正在使用nuxt作为客户端,这就是在客户端设置我的socketio的方式
module.exports = async () => {
process.nextTick(() =>{
var io = require('socket.io')(strapi.server);
io.on('connection', async function(socket) {
console.log(`a user connected`)
// send message on user connection
socket.emit('hello', JSON.stringify({message: await strapi.services.profile.update({"posted_by"})}));
// listen for user diconnect
socket.on('disconnect', () =>{
console.log('a user disconnected')
});
});
strapi.io = io; // register socket io inside strapi main object to use it globally anywhere
})
};
modules:[
...
'nuxt-socket-io',
...
],
io: {
// module options
sockets: [
{
name: 'main',
url: 'http://localhost:1337',
},
],
},
它有效。
答案 1 :(得分:0)
将第三方服务集成到 Strapi 的一种简洁方法是使用 hooks。它们在服务器引导期间加载一次。在这种情况下,我们将创建 a local hook。
以下示例适用于 org.apache.fop.fo.expr.PropertyException: null:3:14496: No conversion defined #black; property:'color'
at org.apache.fop.fo.properties.PropertyMaker.make(PropertyMaker.java:446)
at org.apache.fop.fo.PropertyList.convertAttributeToProperty(PropertyList.java:499)
at org.apache.fop.fo.PropertyList.addAttributesToList(PropertyList.java:386)
at org.apache.fop.fo.FObj.processNode(FObj.java:127)
at org.apache.fop.fo.FOTreeBuilder$MainFOHandler.startElement(FOTreeBuilder.java:293)
at org.apache.fop.fo.FOTreeBuilder.startElement(FOTreeBuilder.java:179)
at org.docx4j.org.apache.xalan.transformer.TransformerIdentityImpl.startElement(TransformerIdentityImpl.java:1119)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:374)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2784)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:602)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:505)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:842)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:771)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
at org.docx4j.org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:518)
at org.docx4j.utils.XmlSerializerUtil.serialize(XmlSerializerUtil.java:51)
at org.docx4j.utils.XmlSerializerUtil.serialize(XmlSerializerUtil.java:18)
at org.docx4j.convert.out.fo.renderers.FORendererApacheFOP.render(FORendererApacheFOP.java:247)
at org.docx4j.convert.out.fo.renderers.FORendererApacheFOP.render(FORendererApacheFOP.java:181)
at org.docx4j.convert.out.fo.AbstractFOExporter.postprocess(AbstractFOExporter.java:168)
at org.docx4j.convert.out.fo.AbstractFOExporter.postprocess(AbstractFOExporter.java:47)
at org.docx4j.convert.out.common.AbstractExporter.export(AbstractExporter.java:81)
at org.docx4j.Docx4J.toFO(Docx4J.java:712)
at org.docx4j.Docx4J.toPDF(Docx4J.java:741)
。
strapi@3.6
处为 socket.io
创建一个钩子./hooks/socket.io/index.js
module.exports = strapi => {
return {
async initialize() {
const ioServer = require('socket.io')(strapi.server, {
cors: {
origin: process.env['FRONT_APP_URL'],
methods: ['GET', 'POST'],
/* ...other cors options */
}
})
ioServer.on('connection', function(socket) {
socket.emit('hello', `Welcome ${socket.id}`)
})
/* HANDLE CLIENT SOCKET LOGIC HERE */
// store the server.io instance to global var to use elsewhere
strapi.services.ioServer = ioServer
},
}
}
./config/hook.js
大功告成。您可以在 module.exports = {
settings: {
'socket.io': {
enabled: true,
},
},
};
或 models' lifecycle hooks 内访问 websocket 服务器。
./config/functions/bootstrap.js