2015-11-07 16 views
20

मेरे पास वेबपैक-डीवी-मिडलवेयर और वेबपैक-हॉट-मिडलवेयर का उपयोग कर कोआ सर्वर है जो गर्म मॉड्यूल प्रतिस्थापन (एचएमआर) कर रहा है, इसलिए क्लाइंट में परिवर्तन को धक्का देने के लिए मिडलवेयर वेबसाईट का उपयोग करता है।वेबपैक-हॉट-मिडलवेयर के साथ socket.io का उपयोग कैसे करें?

लेकिन मेरे एप्लिकेशन कोड को क्लाइंट और कोआ सर्वर के बीच अपने स्वयं के वेबस्केट कनेक्शन की भी आवश्यकता है। मुझे नहीं पता कि इसे कैसे प्राप्त किया जाए? ऐसा लगता है कि दोनों विरोधाभासी हैं। क्या मैं उन्हें एक तरफ रख सकता हूं?

मेरे सर्वर कोड इस

const compiler = webpack(webpackConfig) 
const app = new Koa() 

app.use(webpackDevMiddleware(compiler, { 
    quiet: true, 
    noInfo: true 
    stats: { 
    colors: true, 
    reasons: true 
    } 
}))) 

app.use(webpackHotMiddleware(compiler)) 

const server = require('http').createServer(app.callback()) 
const io = require('socket.io')(server) 
io.on('connection', function() { console.log('socket connection!!') }) 

और तरह

import Client from 'socket.io-client' 
const io = Client() 
io.on('connection', (socket) => { 
    console.log('+++ io connected! ++++') 
    io.on('disconnect',() => { console.log('disconnected', socket) }) 
}) 

HMR सॉकेट सही ढंग से काम कर रहा है मेरे मुवक्किल कुछ तरह दिखता है, लेकिन एक दूसरे GET /socket.io/?EIO=3&transport=polling&t=1446911862461-0 और उन से बात करने की कोशिश कर रहा है अनुरोध विफल रहे हैं।

मैं एक वेबस्केट कैसे बना सकता हूं जो एचएमआर सॉकेट से टकराव नहीं करता है?

+0

आपने इसे कैसे ठीक किया? मैं एक समान मुद्दे पर चल रहा हूं जहां एक्सप्रेस कोड काम करता है लेकिन कोआ हमेशा एक 404 – cyberwombat

उत्तर

12

यहां worked for me in an app I'm working on है जहां मैं उसी एक्सप्रेस सर्वर पर वेबपैक हॉट रीलोडिंग + सॉकेट.io का उपयोग कर रहा हूं।

अपने package.json को परिवर्धन:

"webpack-dev-middleware": "^1.4.0", 
"webpack-hot-middleware": "^2.6.0" 

अपने webpack config की plugins अनुभाग में: एक्सप्रेस अनुप्रयोग के लिए

plugins: [ 
    new webpack.optimize.OccurenceOrderPlugin(), 
    new webpack.HotModuleReplacementPlugin(), 
    new webpack.NoErrorsPlugin(), 
], 

सेटअप:

const http = require('http'); 
const express = require('express'); 

const webpack = require('webpack'); 
const webpackConfig = require('./webpack.config'); 
const compiler = webpack(webpackConfig); 

// Create the app, setup the webpack middleware 
const app = express(); 
app.use(require('webpack-dev-middleware')(compiler, { 
    noInfo: true, 
    publicPath: webpackConfig.output.publicPath, 
})); 
app.use(require('webpack-hot-middleware')(compiler)); 

// You probably have other paths here 
app.use(express.static('dist')); 

const server = new http.Server(app); 
const io = require('socket.io')(server); 

const PORT = process.env.PORT || 8090; 

server.listen(PORT); 

io.on('connection', (socket) => { 
    // <insert relevant code here> 
    socket.emit('mappy:playerbatch', playerbatch); 
}); 

मैं के लिए एक इनाम तैनात इस प्रश्न को उत्तर देने में मदद करने के लिए यह सवाल है, हालांकि मुझे मिल गया है मेरे अपने ऐप के लिए काम नहीं कर रहा हूँ।

+0

उत्पन्न करता है तो आपको कुछ विशेष करने की ज़रूरत नहीं थी? यह मेरे लिए नियमित एक्सप्रेस + सॉकेट.ओ कोड जैसा दिखता है। मैं engine.io (socket.io में अंतर्निहित लाइब्रेरी) का उपयोग कर समाप्त हुआ क्योंकि मुझे एहसास हुआ कि मुझे केवल एक वेबसाइकिल की आवश्यकता है, न कि फॉलबैक तंत्र। यह बिना किसी समस्या के काम किया। –

+0

मिडलवेयर रखा गया था जब आदेश निश्चित रूप से मुझे प्रभावित किया। –

+0

मुझे नहीं पता था कि इससे कोई फर्क पड़ता है। धन्यवाद! –

संबंधित मुद्दे